Veikėjas
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
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
Į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
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:
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
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)