Veikėjas

Iš wiki.angis.net.
Jump to navigation Jump to search


Speciali klasė, skirta žaidimų veikėjams programuoti. Veikėjai gali sukiotis, vaikščioti pirmyn, atgal, kairėn ir dešinėn; jie gali būti sudaryti iš paveiksliuko arba turėti animuotą išvaizdą.

Veikėjas paveldi iš klasės Daiktas, tai yra, turi tą patį funkcionalumą kaip ir Daiktas, ir dar papildomų komandų.

Paprastesniems atvejams (kai tereikia sudėlioti įvairius paveiksliukus ekrane) užtenka klasės Daiktas.

Paprastas pavyzdys

Veikėjas (karys) sudarytas iš statinio paveiksliuko ir komanda sakyk()
reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/veik/karys/karys.png'])

karys = žaidimas.Veikėjas('pav/veik/karys/karys.png')
karys.atsirask(100, 100)

karys.pirmyn(30)

karys.sakyk("labas")

Veikėjas.atsirask(x,y) komanda yra paveldėta iš klasės Daiktas. Taigi, jai reikalingi du parametrai - x ir y. Šiame pavyzdyje, karys atsiras koordinatese x=100 , y = 100. Koordinatės skaičiuojamos nuo viršutinio kairiojo kampo.

Atkreipk dėmesį, jog komandos Veikėjas.pirmyn() nebuvo klasėje Daiktas, ji pridėta tik Veikėjo klasėje. Parametruose perduodama, kiek žingsnių veikėjas turi eiti žiūrima kryptimi.

Komanda Veikėjas.sakyk() irgi nauja. Ši komanda nupiešia šalia Veikėjo teksto burbuliuką, kuris išnyksta po 4 sekundžių, arba vartotojui jį uždarius.

Animuoto Veikėjo pavyzdys

Animuotas standartinis Angies veikėjas

Įdomesniems žaidimams reikalinga, kad Veikėjai būtų animuoti. Štai kaip galima panaudoti standartinį Angies veikėją:

reikalinga angis
reikalingas žaidimas
reikalinga herojai

fėja = herojai.fėja
fėja.atsirask(200, 200)

kartok 36:
    fėja.pirmyn(2)
    fėja.kairėn(10)

fėja.sakyk("jau!")

Šioje programoje, pasiėmėme fėją iš bibliotekos herojai.py

Fėja 36 kartus eina po du žingsnius pirmyn, tada pasisuka 10 laipsnių kairėn. Po 36 kartų ji jau vėl atsiranda pradinėje pozicijoje (36 x 10 = 360 laipsnių).

Bibliotekoje herojai.py yra keletas standartinių Angies veikėjų.

Vėžliuko grafika

Vėžliuko grafikos pavyzdys

Veikėjas gali būti naudojamas taip vadinamai "Vėžliuko grafikai" braižyti: tai yra, naudojantis komandomis:

  • pirmyn()
  • atgal()
  • kairėn()
  • dešinėn()
  • piešim()
  • nebepiešim()

Štai pavyzdys, kaip nupiešiama žvaigždė:

reikalingas lygis0

princas = lygis0.princas
princas.piešim()

kartok 7:
    princas.pirmyn(2)
    princas.dešinėn(180 + 26)


Sukiojimasis

Animuoti veikėjai atsižvelgia į judėjimo kryptį, ir pasisukus, naudoja atitinkamą animaciją.

Sukiojimams gali būti naudojamos įvairios komandos:

Pasisukimas nuo dabartinės Veikėjo krypties

  • komanda kairėn(laipsniai=90)
  • komanda dešinėn(laipsniai=90)

Šios komandos pasuka Veikėją kažkiek laipsnių į kairę arba į dešinę (žiūrint iš Veikėjo perspektyvos). Tai patogu, norint Veikėją pasukti nuo dabartinės Veikėjo krypties. Jeigu laipsniai nenurodyti, Veikėjas bus pasukamas 90 laipsnių kampu.

Štai programa, kuri 36 kartus pasuka Veikėją po 10 laipsnių kairėn - todėl Veikėjas vėl atsisuka, kur buvęs:

reikalinga angis
reikalingas žaidimas
reikalinga herojai

fėja = herojai.fėja
fėja.atsirask(200, 200)

kartok 36:
    fėja.kairėn(laipsniai = 10)
    fėja.pirmyn(žingsniai = 2)

Atsisukimas į nurodytą kryptį

  • komanda pasisukĮ(laipsniai=270)

Ši komanda tiesiog nustato Veikėjo žiūrėjimo kryptį, neatsižvelgiant į jo dabartinę. Tai patogu, jei nori Veikėją atsukti pvz., tiesiai žemyn - nepriklausomai nuo to, kur Veikėjas žiūrėjo iki tol.

Atkreipk dėmesį, kad pasisukĮ komanda gali užtrukti iki sekundės - Veikėjo pasisukimas šiuo atveju yra gana lėtas.

Štai kaip sukiojasi animuotas Veikėjas:

reikalinga angis
reikalingas žaidimas
reikalinga herojai

fėja = herojai.fėja
fėja.atsirask(200, 200)

kryptis = 0
kartok 36:
    fėja.žiūrėkĮ(kryptis)
    kryptis = kryptis + 10

SVARBU! NE animuoti veikėjai komandą pasisukĮ traktuoja kitaip - jie paverčia visą paveiksliuką (panašiai, kaip Daiktas).

Štai kaip sukiojasi neanimuotas Veikėjas:

Neanimuoto Veikėjo ("karys.png") ir animuoto Veikėjo (herojai.fėja) pasisukimas -45 laipsnių kampu: animuotas Veikėjas pakeičia atitinkamą animaciją, o neanimuotas veikėjas pasuka rodomą paveiksliuką.
reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/veik/karys/karys.png'])

karys = žaidimas.Veikėjas('pav/veik/karys/karys.png')
karys.atsirask(100, 100)

kryptis = 0
kartok 36:
    karys.pasisukĮ(kryptis)
    kryptis = kryptis + 10


  • komanda žiūrėkĮ(laipsniai)

Ši komanda irgi iškart nustato Veikėjo žiūrėjimo kryptį, neatsižvelgiant į dabarinę.

Atkreipk dėmesį, kad Veikėjo pasisukimas yra labai greitas.

  • komanda žiūrėkĮ(x,y)

Ši komanda apskaičiuoja, kokiu kampu Veikėjas turi pasisukti, kad žiūrėtų tiesiai į nurodytą koordinatę.

Atkreipk dėmesį, kad Veikėjo pasisukimas yra labai greitas.

Štai programos pavyzdys, kur animuotas veikėjas stengiasi būti atsisukęs į pelės kursorių:

reikalinga angis
reikalingas žaidimas
reikalinga herojai

fėja = herojai.fėja
fėja.atsirask(200, 200)

komanda žiūrėkĮPelę(pelėsX, pelėsY):
    fėja.žiūrėkĮ(x = pelėsX, y = pelėsY)

žaidimas.pelęJudinant(žiūrėkĮPelę)

Paaiškinimas: komanda žaidimas.pelęJudinant užregistravo veiksmą (t.y. žiūrėkĮPelę ), kuris bus iškviečiamas kiekvieną kartą pelę pajudinus (daugiau žiūrėk Pelės programavimo aprašyme).

Tame veiksme/komandoje Veikėjui nustatoma žiūrėjimo kryptis: žiūrėkĮ(pelėsX, pelėsY).


Veikėjo krypties vektorius

Veikėjas (fėja) ir Veikėjo krypties vektorius (balta rodyklė)

Norint pamatyti, kuria kryptimi žiūri Veikėjas, patogu matyti jo krypties vektorių:

reikalinga angis
reikalingas žaidimas
reikalinga herojai

fėja = herojai.fėja
fėja.atsirask(200, 200)
fėja.rodykVektorių()

komanda žiūrėkĮPelę(pelėsX, pelėsY):
    fėja.žiūrėkĮ(x = pelėsX, y = pelėsY)

žaidimas.pelęJudinant(žiūrėkĮPelę)

Dabar matysi tiksliau, į kurią pusę Fėja žiūri. Taip patogu kurti programas, kuriose Veikėjai ką nors braižo ir piešia.

Nuosavo Animuoto veikėjo kūrimas

Savo nuosavo veikėjo sukūrimas yra sudėtinga užduotis. Pirmiausia, reikia paveiksliuko, kuriame sudėliotos visos reikalingos veikėjo pozos (spritesheet). Be to, reikia .json failo, kuriame aprašyta, kokie paveiksliukai ką daro.

Štai pavyzdys, kaip atrodo veikėjo karys sukūrimas:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/veik/karys/karys.png',
	              'pav/veik/karys/karys.json'])

alapas = žaidimas.AnimacijųLapas('pav/veik/karys/karys.json')

karys = žaidimas.Veikėjas(failoVardas = 'pav/veik/karys/karys.png')
karys.animuok(judesys="idle", 	     
              animacija=alapas.animacija("idle",  0.05))

karys.animuok(judesys="south",       
              animacija=alapas.animacija("south", 0.2))
karys.animuok(judesys="idle_south",  
              animacija=alapas.animacija("idle_south", 0.05))

karys.animuok(judesys="west",        
              animacija=alapas.animacija("west", 0.2))
karys.animuok(judesys="idle_west",   
              animacija=alapas.animacija("idle_west", 0.05))

karys.animuok(judesys="east",        
              animacija=alapas.animacija("east", 0.2))
karys.animuok(judesys="idle_east",   
              animacija=alapas.animacija("idle_east", 0.05))

karys.animuok(judesys="north",       
              animacija=alapas.animacija("north", 0.2))
karys.animuok(judesys="idle_north",  
              animacija=alapas.animacija("idle_north", 0.05))

karys.atsirask(100, 100)

kartok 4:
    karys.pirmyn(5)
    karys.kairėn()

Animacijos "south", "west", "east", "north" aprašo Veikėjo animacijas einant žemyn, dešinėn, kairėn ir aukštyn.

Animacijos "idle_south", "idle_west", "idle_east" ir "idle_north" aprašo Veikėjo animacijas, kuomet veikėjas lūkuriuoja (nieko nedaro).

Pilna specifikacija

(paveldi visus metodus iš Plytelės ir iš Daikto)

Konstruktorius

konstruktorius(failoVardas)

konstruktorius(failoVardas, x, y)

iš Plytelės paveldėti metodai

komanda naudokPaveiksliuką(failoVardas)

fonas = naudokPaveiksliuką;

komanda naudokAnimaciją(animacija)

komanda duokKoordinates(): x, y

komanda duokIšmatavimus(): plotis, aukštis

komanda sukis(laipsniai, greitis)

komanda sukis(kryptis, greitis )

komanda pasislėpk()

slėpkis = pasislėpk;

komanda pasirodyk()

rodykis = pasirodyk;

komanda arMatomas(): boolean

yraMatomas = arMatomas

matomas = arMatomas

iš klasės Daiktas paveldėti metodai

komanda atsirask(x, y)

teleportuokis = atsirask

komanda sakyk(tekstas ...)

komanda paklausk(tekstas ...): tekstas

paklauskTeksto = paklausk;

komanda paklauskSkaičiaus(tekstas...): skaičius

komanda duokKliūtį(): x, y, plotis, aukštis

komanda nustatykKliūtį(x, y, plotis, aukštis)

komanda prisikabinkPriePelės()

komanda atsikabinkNuoPelės()

komanda rodykZonas()

komanda slėpkZonas()

komanda piešim()

piešk  = piešim;

komanda nebepiešim()

nebepiešk = nebepiešim;

nepiešk = nebepiešim;

nepiešim = nebepiešim;

komanda pelęUžvedus(komanda)

komanda pelęNuvedus(komanda)

komanda pelęPaspaudus(komanda)

komanda pelęAtleidus(komanda)

komanda pelęPaspaudusDešinįKlavišą(komanda)

komanda pelęAtleidusDešinįKlavišą(komanda)

komanda pelęJudinant(komanda)

klasės Veikėjas metodai

komanda rodykVektorių()

komanda slėpkVektorių()


komanda greitis(greitis=1)

komanda žingsnioIlgis(atstumas=1)


komanda stok()

stop = stok


komanda žiūrėk(laipsniai)

komanda žiūrėk(x,y)

žiūrėkĮ = žiūrėk


komanda pasisuk(laipsniai=270)

pasisukĮ = pasisuk


komanda pirmyn(žingsniai=1, greitis)

priekin = pirmyn

komanda atgal(žingsniai=1, greitis)

komanda kairėn(laipsniai=90)

kairen = kairėn;

komanda dešinėn(laipsniai=90)

desinen = dešinėn


komanda susidūrus(daiktas, komanda)


komanda judėk(kampas, greitis, dx, dy)

komanda judėk(atstumas, kampas, greitis, dx, dy)

komanda animuok(animacija, judesys)