« Előző oldal- - - ^Tartalom^- - - Következő oldal »
11. fejezet
Események
A Game Maker eseményvezérelt szemléletet
valósít meg. Ez azt jelenti, hogy az objektumok példányai
eseményeket kapnak (valamilyen üzenetet hogy történt valami).
Az objektumok példányai ezekre az eseményekre bizonyos
cselekvések végrehajtásával reagálnak. Minden egyes objektum
számára meg kell határozni, hogy milyen eseményekre és hogy
milyen akciókkal reagáljon. Ez talán bonyolultan hangzik, de
valójában nagyon egyszerű. Először is a legtöbb eseményre
az objektumnak nem kell reagálnia. Azokhoz az eseményekhez
pedig, amelyekre az objetumnak reagálni kell, nagyon egyszerűen
fogd és vidd módszerrel rendelheted hozzá a
megfelelő akciókat.
Az objektum tulajdonságlapjának közepén található az
eseménylista. Itt vannak azok az események, amelyekre az
objektumnak reagálnia kell. Kezdetben a lista üres. Neked kell
eseményeket hozzáadnod az Add Event gomb
megnyomásával. A gomb lenyomásakor egy ablak ugrik elő, ami
különböző típusú eseményeket tartalmaz. Innen tudod
kiválasztani a szükséges eseményt. Egyes gombok
megnyomásakor egy újabb menü jelenik meg, további
választási lehetőséget biztosítva az adott kategórián
belül. Például a billentyűzet eseményekhez ki kell
választanod a billentyűt. (Ebben a fejezetben lentebb
található az események teljes listája a leírásukkal.) Az
események listájához hozzáadott események közül egy ki van
jelölve. Bármelyiket kijelölheted ha a bal egérgombbal
rákattintasz. Jobb oldalon találhatóak az akciók, kis ikonok
jelképezik őket. Különböző csoportokba vannak rendezve a
fülek alatt. A következő fejezetben be fogom mutatni az
összes akciót és amit az akciók csinálnak. Az eseménylista
és az akciók panelje között található az akciók listája.
Ez a lista az éppen kiválasztott eseményhez tartozó akciókat
tartalmazza. Új akció hozzáadásához fogd meg a kívánt
akciót a panelen, és húzd át az akció listába. A listában
egymás alatt helyezkednek el, rövid magyarázattal. Mindegyik
akcióhoz meg kell adni néhány paramétert. Ezekről is a
következő fejezetben lesz szó. Szóval néhány esemény és
akció hozzáadása után valami hasonlót láthatsz:
Most kezdhetsz akciókat adni a többi
eseményhez. Válaszd ki bal egérgombbal a kívánt eseményt,
és adj hozzá akciókat. Ha valamelyik eseményhez nem adsz
akciót, az az ablak bezárásakor automatikusan törlődik. Ha
olyan esemény akarsz törölni, amelyhez tartozik akció, a
program a törlés megerősítését kéri.
A fogd és vidd módszerrel az akciók sorrendjét az akciók
listájában könnyen megváltoztathatod. Ha ilyenkor az [Alt]
billentyűt nyomva tartod, az akciót másolod. A különböző
objetumok akciólistái között is másolhatod az akciókat a
jobb egérgombra előbukkanó lista Copy, Cut, Paste
(másolás, kivágás, beillesztés) parancsaival. (A [Shift]
vagy [Ctrl] gombok lenyomva tartása mellett
egyszerre több akció is kijelölhető kivágásra, másolásra,
vagy törlésre. A [Ctrl][A] lenyomásával az
összes akció kiválasztható.) Ugyanitt törölheted is az
akciót (erre a [Del] billentyűt is
használhatod). Ha az egérmutatót az akció felett tartod egy
rövid bemutatás bukkan elő. Az akciókról bővebben a
következő fejezetben.
Az esemény törléséhez az összes akciójával együtt
használd a Delete gombot.( Az akció nélküli események
az ablak bezárásakor automatikusan törlődnek, szóval ezt nem
kell megtenned.) Ha egy akcióhoz más eseményt akarsz rendelni
(például más billentyűt akarsz használni), használd a Change
gombot és válassz új eseményt. (Az esemény tulajdonságait
nem kell újra meghatározni.) Az eseménylistán jobb
kattintással felbukkanó menüt használva egy esemény meg is
kettőzhető, ami egy új esemény hozzáadását jelenti, azonos
akciókkal.
Eléggé nagyszámú különböző esemény létezik. Itt van a
különböző események leírása. (Ne felejtsd el, hogy ezek
közül általában csak néhányat használsz.)
Create event
Ez az esemény az objetum egy példányának születésekor
(létrejöttekor) következik be. Általában arra használatos
hogy egy kezdő mozgást adjunk a példánynak és/vagy
beállítsuk a példány változóit.
Destroy event
Ez az esemény az objetum egy példányának megsemmisülésekor
következik be. Pontosabban épp a megsemmisülés előtt
történik, tehát a példány az esemény bekövetkeztekor még
létezik! A legtöbbször ez az esemény nem használatos, de
használható pl. a pontszám megváltoztatására vagy más
ojektumok megteremtésére.
Alarm events
Minden példánynak van 8 ébresztőórája (ezek tulajdonképpen
visszaszámlálók). Ezeket az órákat egy bizonyos akcióval
állíthatod be (lásd a következő fejezetet) Az ébresztőóra
visszaszámol 0-ig, és ebben a pillanatban létrejön az
esemény. Hogy egy adott ébresztőhöz akciókat rendelj,
először ki kell választani a menüben. Az ébresztőórák
jól használhatóak. Be tudsz állítani dolgokat hogy azok
időről-időre újra történjenek meg. Például hogy egy
szörny minden húszlépés után változtassa meg a mozgási
irányát. (Ebben az esetben az esemény egyik akciójában újra
be kell állítani az órát)
Step events
A lépés esemény a játék minden egyes lépésében
megtörténik. Ide olyan akciókat tehetsz, amelyeket
folyamatosan végre kell hajtani. Például ha egy objektumnak
követni kell a másikat, itt megadhatod a mozgás irányát a
követendő objektum felé. Légy óvatos ezzel az eseménnyel.
Ha egy objektumnak sok példánya létezik, ne rendelj sok
bonyolult akciót ehhez az eseményhez. Ez lelassíthatja a
játékot. Egészen pontosan három lépés esemény létezik. A
begin step (kezdő lépés) esemény minden egyes lépés
elején, minden más esemény előtt hajtódik végre. A normal
step (normál lépés) esemény pontosan azelőtt hajtódik
végre, mielőtt a példányok új pozicióba mozdulnak. Az end
step (lépés vége) esemény a lépés végén, a kirajzolás
előtt hajtódik végre. Ezt tipikusan a sprite
megváltoztatására használják az aktuális mozgási
iránytól függően.
Collision events
Ha két példány ütközik (vagyis ha sprite-jaik részben fedik
egymást), bekövetkezik az ütközési esemény. Pontosabban
két ütközési esemény történik: mindkét példányra
egy-egy. A példány pedig képes erre az eseményre is
reagálni. Az előugró menüből ki kell választani azt az
ojektumot, amelyikre az eseményt vonatkoztatni akarjuk. Aztán
akciókat rendelünk hozzzá.
Különbség van aközött, ha egy példány tömör (solid),
vagy nem tömör objektummal ütközik. Először is ha az
ütközés eseményhez nincs akció rendelve, semmi sem
történik. A példány tovább mozog, akkor is, ha a másik
objektum tömör. Ha az ütközési esemény akciókat tartalmaz,
a következők történnek:
Ha a másik objektum tömör, a példány visszakerül előző
pozíciójába (ahol az ütközési esemény előtt volt). Aztán
az esemény végrehajtódik. Végül a példány az új helyére
mozdul. Például ha az esemény a példány mozgásirányát
megfordítja, a példány megállás nélkül visszapattan a
falról. Ha itt is ütközik, megtartja előző pozicióját.
Szóval ténylegesen megáll.
Ha a másik objektum nem szilárd, a példány nem mozdul vissza.
Az esemény végrehajtódik a példány jelenlegi
pozíciójában. És nincs új ütközési ellenőrzés. Ha
jobban belegondolsz, logikusan ennek kell történnie. Mivel az
objektum nem tömör, egyszerűen "keresztül" lehet
rajta menni. Az esemény figyelmeztet minket, hogy ez történik.
Keyboard events
Amikor a játékos lenyom egy billentyűt, az objektum minden
egyes példányán megtörténik a billentyűzet esemény. Minden
egyes billentyűhöz tartozik egy esemény. A menüben
kiválaszthatod a kívánt billentyű eseményt, és utána
akciókat rendelhetsz hozzá. Normál esetben csak néhány
objektumhoz tartozik néhány billentyű esemény. Az esemény
minden lépésben megtörténik, amíg a játékos nyomva tartja
a billentyűt. Van két speciális billentyűzet esemény. Az
egyik a No key. Ez minden egyes lépésben végre van
hajtva, amikor nincs lenyomva billentyű. A másik másik ilyen
esemény az Any key, amely bármely billentyű
lenyomásakor végrehajtódik. Ha a játékos több billentyűt
lenyom egyszerre, mindegyik esemény végrehajtásra kerül. A
kiegészítő billentyűzet billentyűi csak akkor generálják a
megfelelő eseményt, ha a Num Lock be van kapcsolva.
Mouse events
Az egér események akkor akkor történnek a példányokkal, ha
az egérmutató a példányt jelképező sprite-on belül van.
Attól függően, hogy melyik egér billentyű van lenyomva, van
nincs gomb (no button), bal gomb (left), jobb gomb (right) és
középső gomb (middle) esemény. Az egér esemény (mouse
button) minden lépésben megtörténik, amíg a játékos
lenyomva tartja a billentyűt vagy no button esetén ha a kurzor
a sprite-on belül van. A lenyomás (press) események a gomb
lenyomásakor csak egyszer következnek be. A felengedés
(release) események csak akkor generálódnak, ha a billentyűt
elengedjük. Figyelj oda, hogy mindezen események csak akkor
következnek be, ha az egérmutató a példány fölött van. Egy
tetszőleges helyen való egérgomb lenyomás vagy felengedés
esemény kezeléséhez használd a global mouse events-t,
ami egy almenüben található. Van még két különleges egér
esemény. A belépés (mouse enter) esemény akkor történik,
mikor az egér belép az objektumpéldányba, az elhagyás (mouse
leave) esemény pedig, amikor elhagyja azt. Ezek az események
jellemzően a kép megváltoztatására (pl. egy gombnál, amikor
hozzáért az egér) vagy egy hang lejátszására
használatosak. Végül számos esemény van a botkormányra
vonatkozóan is. Beállíthatók cselekvések a botkormány négy
fő irányához (átlós irányban mindkét esemény
megtörténik), valamint 8 gombjához. Mindezek beállíthatók
az elsődleges és a másodlagos botkormányhoz.
Other events
Számos más esemény van, amelyek bizonyos játékokban
hasznosak lehetnek. Ezek ebben a menüben találhatók. A
következő eseményekről van szó:
- Outside: Ez az esemény akkor következik be, ha a
példány teljesen a szobán kívűl kerül. Ez egy jó pillanat
az objektum megsemmisítésére.
- Boundary: Ez az esemény akkor következik be,
ha a példány a szoba határához ér.
- Game start: Ez az esemény az első szoba összes
példányával megtörténik a játék indulásakor. Ez a room
start (szoba indulás) esemény (ld. lentebb) előtt és a
creation (létrehozás) esemény előtt történik meg. Ez az
esemény tipikusan egy "controller"(vezérlő)
objektumban van meghatározva, és a háttérzene
elindításához, néhány változó beállításához vagy
néhány adat betöltéséhez használjuk.
- Game end: Az összes példányra vonatkozik a játék
végén. Általában ez is csak egyetlen objektumhoz
kapcsolódik. Használható például adatok fájlba
mentéséhez.
- Room start: A szoba indulásakor a keletkező
példányokra vonatkozik. A létrehozás esemény után
történik.
- Room end: Minden létező példányra vonatkozik a szoba
megszűnésekor.
- No more lives: A Game Makerben beépített
"élet" rendszer van. Az életek számának
beállítására külön akció van. Az esemény bekövetkezik,
ha az életekszáma 0, vagy annál kevesebb lesz. Jellemzően a
játék befejezéséhez vagy újraindítására használjuk.
- No more health: A Game Makerben beépített
"egészség" rendszer van. Az egészség (vagy energia)
számának beállítására külön akció van. Az esemény
bekövetkezik, ha az energia száma 0, vagy annál kevesebb lesz.
Jellemzően az életek számának csökkentéséhez vagy a
játék újraindítására használjuk.
- End of animation: Ahogy az előzőekben leírtam, az
animáció egymás után mutatott képek sorozata. Miután az
utolsó megjelent, újra az első következik. Ez az esemény
ebben a pillanatban következik be. Ez felhasználható az
animáció megváltozatásához, vagy a példány
megsemmisítésére.
- End of path: Ez az esemény akkor következik be, ha a
példány egy nyomvonalat követve annak végéhez ér. A
nyomvonalakról bővebben a 21. fejezetben fogunk beszélni.
- User defined: Nyolc ilyen esemény van. Addig nem
hajtódnak végre amíg kóddal meg nem hívjuk őket.
Drawing event
A példányok, ha láthatóak, minden egyes lépésben
kirajzolják sprite-jukat a képernyőre. Ha a rajzolás
eseményhez akciókat rendelünk, a sprite kirajzolása helyett
ezek hajtódnak végre. Ez felhasználható arra, hogy a sprite
helyett valami mást rajzoljunk ki, vagy megváltoztassuk a
sprite paramétereit. Sok rajzolási akció van, amelyeket a
rajzolás eseményhez rendelhetünk. A rajzolás esemény csak
akkor történik meg, ha az objektum látható. Figyelj oda arra
is, hogy függetlenül attól, hogy mit rajzolsz ide, az
ütközési esemény a példányhoz rendelt sprite alapján
következik be.
Key press events: Ez az
esemény hasonló a billentyűzet eseményhez, de a
billentyűlenyomásakor csak egyszer történik meg, nem
folyamatosan minden lépésben. Ez akkor hasznos, ha egy
cselekvés megtörténését csak egyszer akarjuk.
Key release events: Ez is hasonló a a
billentyűzet eseményhez, de csak egyszer hajtódik végre a
billentyűzet felengedésekor.
Néhány esetben fontos, hogy ismerjük az események
megtörténésének sorrendjét. A Game Maker tehát a
következő sorrendben hajtja végre az eseményeket:
-Begin step events (lépés kezdés események)
-Alarm events (visszaszámlálási események)
-Keyboard, key press és key release (billentyűzet, bill.
lenyomási és bill. felengedési események)
-Mouse events (egér események)
-(most minden példány az új pozicióba mozdul)
-Collision events (ütközési események)
-End step events (lépés vége események)
-Drawing events (rajzolási események)
A születés, megsemmisülés és más események akkor
következnek be, amikor ezek a dolgok történnek.