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