Daiktas

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

Speciali klasė, skirta programuoti judančius paveiksliukus. Iš Daiktų patogu sudėlioti žaidimo arba asmeninio internetinio puslapio grafinius elementus, taip pat juos kilnoti ir sukioti.

Sudėtingesniems judesiams programuoti skirta klasė Veikėjas.

Paprastas pavyzdys

Kelių paveiksliukų komponavimo pavyzdys
reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)

pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)

Daiktas.atsirask komandai reikalingi du parametrai - x ir y. Šiame pavyzdyje, medis atsiras koordinatese x=100 , y = 100, o pilis - koordinatėse x = 300 , y = 100. Koordinatės skaičiuojamos nuo viršutinio kairiojo kampo.

Turėk omenyje, kad Daiktai negali persidengti. Jeigu bandytum medžiui nurodyti tokias koordinates, kai medis persidentų su pilimi, tai medis.atsirask komanda nieko neįvykdytų, ir medis liktų kur likęs.

Atsiradimas ir pasislėpimas

Daiktai turi komandas atsirask ir pasislėpk.

atsirask komanda gali nurodyti naujas koordinates, o jei niekas nenurodyta - tiesiog padaro Daiktą vėl matomu.

pasislėpk komanda tiesiog paslepia daiktą.

Sužinoti, ar Daiktas matomas, gali jam iškvietęs komandą arMatomas (atsakymas bus True jei Daiktas matomas, ir False kitu atveju).

Štai programa, kurioje pilis atsiranda ir vėl pranyksta kas 2 sekundes:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/pilis1.png'])

pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask (x=300, y=300)

komanda pakeiskMatomumą():
    jei pilis.arMatomas():
        rašyk("pasislėpiau")
        pilis.pasislėpk()
    kituatveju:
        rašyk("pasirodžiau")
        pilis.atsirask()

angis.Taimeris(veiksmas = pakeiskMatomumą, dažnis = 2)

Šioje programoje sukuriamas naujas Taimeris , kuris kas dvi sekundes iškviečia komandą arba pilis.pasislėpk(), arba pilis.atsirask()

Kliūtis (užimama vieta)

rodykZonas() komandos pavyzdys. Violetinės zonos (kliūtis) negali persidengti.

Daiktas gali užimti visą plotą, kurį dengia jo paveiksliukas - tada kiti Daiktai ir Veikėjai negali persidengti. Jeigu nori pamatyti, kokią vietą Daiktas iš tikrųjų užima ekrane, iškviesk jam komandą rodykZonas:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)
medis.rodykZonas()

pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)
pilis.rodykZonas()

Čia violetiniai stačiakampiai rodo Daikto kliūtį - tai yra, zoną, kurioje negalima atsirasti kitiems Daiktams ir Veikėjams.

Sumažinus kliūties zoną, Daiktas gali šiek tiek persidengti su kitu Daiktu. Violetiniai stačiakampiai (kliūties zona) vis dar negali persidengti.

Tačiau kartais reikia nustatyti kitokią užimamą vietą nei paveiksliuko dydis. Tada reikia kliūtį sumažinti, ir Daiktas galės šiek tiek persidengti:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png', 'pav/pilis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)
medis.nustatykKliūtį(x=50, y=110, plotis=40)
medis.rodykZonas()

pilis = žaidimas.Daiktas('pav/pilis1.png')
pilis.atsirask(300, 100)
pilis.nustatykKliūtį(x=10, y=120, plotis=180)
pilis.rodykZonas()

Atkreipk dėmesį į komandą nustatykKliūtį. Ji nurodo, kokia bus šio Daikto (pilies arba medžio) kliūties zona.

Kaip matai, dabar pilis ir medis gali šiek tiek persidengti: dabar Angis užtikrina, kad nepersidengtų violetiniai stačiakampiai (t.y. Daikto kliūties zona), kurie yra mažesni už visą Daikto užimamą plotą (t.y. žalią stačiakampį).

Komanda rodykZonas() naudinga tik tuomet, kol dar programuoji ir taisai savo programą. Kai norėsi programa dalintis, nepamiršk ištrinti arba užkomentuoti šias vietas, kad zonų (t.y. žalių ir violetinių stačiakampių) neberodytų.

Sukiojimasis

Daiktas gali pasisukti tam tikra kryptimi. Tam reikalinga komanda sukis(laipsniai).

Štai kaip galima apsukti Daiktą 360 laipsnių:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)

kartok 360:
    medis.sukis(laipsniai = 1)
    angis.palauk(1)

Šiame pavyzdyje medis sukasi 1 laipsniu ir programa palaukia 1 milisekundę; visas veiksmas kartojamas 360 kartų. Tokiu būdu medis lėtai apsisuka aplink 360 laipsnių kampu.

Valdymas pele

Daiktas gali reaguoti į pelės paspaudimus, judinimus ir kt. signalus:

  • pelęUžvedus
  • pelęNuvedus
  • pelęPaspaudus
  • pelęAtleidus
  • pelęPaspaudusDešinįKlavišą
  • pelęAtleidusDešinįKlavišą
  • pelęJudinant

Štai pavyzdys, kaip suprogramuoti daiktų dingimą, ant jų paspaudus pele:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(200, 230)

komanda pranyk(pelėsX, pelėsY):
    medis.pasislėpk()

medis.pelęPaspaudus( veiksmas = pranyk )

Reagavimas į pelės signalus registruojamas taip: norimam Daiktui iškviečiama atitinkama komanda, pavyzdžiui, pelęPaspaudus, o parametru nurodoma komanda, kurią kompiuteris įvykdys kada nors ateityje, tam įvykiui nutikus.

Svarbu: atkreipk dėmesį, registruojant veiksmą, nurodomas tik komandos pavadinimas be skliaustelių: medis.pelęPaspaudus(pranyk).

Svarbu: atkreipk dėmesį, kad registruotoji veiksmo komanda privalo turėti lygiai du parametrus - pavyzdžiui, pelėsX ir pelėsY - net jei šie parametrai ir nenaudojami. Veiksmo komanda su kitokiu parametrų skaičiumi nebus kviečiama.

Pavyzdžiui, komanda pranyk(x, y, z): jau būtų klaida!

Prikabinimas prie pelės

Daiktas gali būti prikabinamas prie pelės, ir tokiu būdu nešiojamas per ekraną kartu su pelės kursoriumi.

  • Daiktas.prisikabinkPriePelės()
  • Daiktas.atsikabinkNuoPelės()
reikalingas žaidimas

pilis = žaidimas.Daiktas('pav/pilis1.png', 200, 200)
komanda prikabinkPilįPriePilies(x, y):
   pilis.prisikabinkPriePelės()

pilis.pelęPaspaudus( prikabinkPilįPriePilies )

Piešimas

Daiktas gali būti "piešimo režime": perkeliant Daiktą į naują koordinatę, bus nupiešiama linija iš senosios koordinatės.

Piešimo režimas įjungiamas komanda piešim(), o išjungiamas komanda nebepiešim().

Trijų linijų brėžimas programiniu būdu, judinant Daiktą per nurodytas koordinates.

Štai pavyzdys:

reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/medis1.png'])

medis = žaidimas.Daiktas('pav/medis1.png')
medis.atsirask(100, 100)
medis.piešim()
medis.atsirask(100, 200)
medis.atsirask(200, 200)
medis.atsirask(200, 100)

Šia programa medis keliauja per keturias koordinates, ir palieka liniją.

Kitas pavyzdys: linijų piešimo programa.

Linijų brėžimas per pelės paspaudimo koordinates.
reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/stat/akmuo1.png'])

akmuo = žaidimas.Daiktas('pav/stat/akmuo1.png')
akmuo.piešim()

komanda brėžkLiniją(pelėsX, pelėsY):
    akmuo.atsirask(pelėsX, pelėsY)

žaidimas.pelęPaspaudus(brėžkLiniją)

Ši programa perkelią Daiktą į pelės paspaudimo koordinates, ir iki to taško nupiešia liniją.

Dar vienas pavyzdys: piešimo programa.

Linijų piešimas per pelės judėjimo koordinates.
reikalinga angis
reikalingas žaidimas

angis.naudosiuFailus(['pav/stat/akmuo1.png'])
akmuo = žaidimas.Daiktas('pav/stat/akmuo1.png')

komanda įjunkPiešimoRežimą(pelėsX, pelėsY):
    akmuo.piešim()

komanda išjunkPiešimoRežimą(pelėsX, pelėsY):
    akmuo.nebepiešim()

komanda perkelkAkmenį(pelėsX, pelėsY):
    akmuo.atsirask(pelėsX, pelėsY)

žaidimas.pelęPaspaudus(įjunkPiešimoRežimą)
žaidimas.pelęAtleidus(išjunkPiešimoRežimą)
žaidimas.pelęJudinant(perkelkAkmenį)

Ši programa įjungia piešimo režimą paspaudus pelės mygtuką, o atleidus mygtuką - jį išjungia. Pelę judinant, programa perkelia Daiktą akmuo į pelės koordinates. Tokiu būdu galima piešti.

Pilna specifikacija

(paveldi visus metodus iš Plytelės)

Konstruktorius

konstruktorius(failoVardas, x, y)

iš Plytelės paveldėti metodai

komanda naudokPaveiksliuką(failoVardas)

fonas = naudokPaveiksliuką;


komanda naudokAnimaciją(animacija)


komanda duokKoordinates()


komanda duokIšmatavimus()


komanda sukis(laipsniai, greitis)

komanda sukis(kryptis, greitis )

komanda pasislėpk()

slėpkis = pasislėpk;


komanda pasirodyk()

rodykis = pasirodyk;


komanda arMatomas()

yraMatomas = arMatomas

matomas = arMatomas

klasės Daiktas metodai

komanda teleportuokis(x, y);

atsirask = teleportuokis;

show = atsirask;

teleport = atsirask;


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

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


komanda prisikabinkPriePelės()

komanda atsikabinkNuoPelės()


komanda rodykZonas()

showZones = rodykZonas;

komanda slėpkZonas()

hideZones = slėpkZonas;


komanda piešim()

piešk  = piešim;

penDown = piešim;


komanda nebepiešim()

nebepiešk = nebepiešim;

nepiešk = nebepiešim;

nepiešim = nebepiešim;

penUp = 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)