« 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:

Objektum eseménylapja

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.