« Előző oldal- - - ^Tartalom^- - - Következő oldal »

17.3 fejezet


Szülők

Minden objektumnak lehet egy szülő (parent) objektuma. Ha egy objektumnak szülője van, örökli annak viselkedését. Másképp kifejezve, az objektum a szülő objektum egy sajátos esete. Például ha van négy labda labda1, labda2, labda3 és labda4 néven, és mindegyik ugyanúgy viselkedik, csak a sprite-jaik különböznek, a labda1 lehet a másik három szülő objektuma. Ezesetben az eseményeket csak a labda1 számára kell meghatározni, a többi pedig örökli ezeket, és ugyanúgy viselkednek hasonló esetben. Ha egy akciót rendelsz egy példányhoz, az az utódra is vonatkozik. Így például ha megsemmisíted a labda1 példányt, akkor a labda2, labda3, és labda4 példányok is megsemmisülnek. Ez sok munkától kímél meg.

Gyakran előfordul, hogy az objektumoknak majdnem ugyanúgy kell viselkedniük, de nem teljesen. Például egy szörny le-fel mozog, míg a másik jobbra-balra. Végül is majdnem ugyanúgy viselkednek. Ebben az esetben majdnem minden eseményhez ugyanazon akció kapcsolódik, de egy-kettőnek el kell térni. Itt is lehet az egyik objektum szülője a másiknak, de ebben az esetben az utód objektumnak is meghatározunk eseményeket. Ezek az események felülbírálják a szülő eseményeit. Így ha egy utód objektum eseményei akciókat tartalmaznak ezek hajtódnak a szülő objektum eseményei helyett. Ha a szülő eseményeket is végre akarod hajtani, hívhatod az úgynevezett öröklött eseményeket a megfelelő akció használatával.(call the inherited event)

Ez jól használható azon esetekben, amikor egy alapobjektumot kell csinálni. Ez az alapobjektum tartalmazza az összes alapértelmezett viselkedést, de soha nem használt a játékban, viszont az összes tényleges objkektumnak ez a szülője. A szülőobjektumoknak szintén lehet szülője és így tovább. (De nyilvánvalóan nem készíthetsz zárt kört.) Így az objektumokat hierarchiába tudod rendezni. Ez nagy segítség a rendezett játék elkészítésében, tanácsos jól elsajátítani ezt a módszert.

A szülő objektumnak van egy másik felhasználási módja. Az ütközési esemény más objektumokkal szintén öröklődik. Hadd mutassam be egy példán keresztül. Tegyük fel, hogy van négy különböző fal objektumod. Ha a labda nekiütközik bármelyiknek, megváltoztatja az irányát. Ez a labda ütközés eseményében van meghatározva. Mivel négy különböző fal van, a labdához négy különböző ütközési eseményt kell meghatározni. De ha az egyik fal szülője a mási háromnak, az ütközési eseményt elég erre az egyre meghatározni. A többi ütközés is ugyanazt az eseményt idézi majd elő. Ez egy csomó másolást takarít meg.

Ahogy rámutattunk, ha egy objektumot használunk, az magában foglalja az utódokat. Ez történik, ha egy akciónál megjelölöd, hogy az egy bizonyos objektum példányaira vonatkozzon. Szintén ez történik a with() utasítás használatakor a kódban (lásd később). És szintén ez történik, ha az instance_position, instance_number stb. függvényeket használod. Végül, akkor működik a legjobban, ha egy másik objektum változóira utalsz. A fenti példában, mikor a labda1 sebességét (labda1.speed) 10-re állítod, ez a labda2-re, labda3-ra, és labda4-re is vonatkozik.