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



MOZGÁS ÉS ELHELYEZKEDÉS:

A játékok egyik fontos jellegzetessége az objektumpéldányok mozgása. Minden példánynak van beépített x és y változója, melyek a példány helyzetét jelzik (pontosabban azt a helyet, ahová a példányhoz tartozó kép eredete (origin) el lett helyezve). A 0,0 hely a pálya bal fölső sarka. Az x és y változóinak megváltoztatásával lehet a példány helyzetét megváltoztatni. Ez a módja annak is, ha bonyolultabb mozgásokat akarunk a tárgyhoz beállítani. Ezt a kódot jellemzően a tárgy Lépés (Step) eseményében helyezzük el.
Ha a tárgy állandó sebességgel és iránnyal mozog, van egy könnyebb mód ennek elvégzésére. Minden objektumpéldánynak van egy vízszintes sebessége (hspeed) és egy függőleges sebessége (vspeed), mindkettő lépésenkénti képpontokban jelölve. Egy pozitív értékű vízszintes sebesség jobbra mozgást, míg egy negatív értékű balra mozgást jelent. A pozitív függőleges sebesség lefelé irányuló, a negatív függőleges sebesség pedig fölfelé irányuló. Ezeket a változókat tehát csak egyszer kell beállítani (pl. a Létrehozás (Create) eseményben) az objektumpéldány állandó mozgásának megadásához.
Egy irány (fokokban 0 és 359 között) és egy sebesség (nem-negatív) használatával is meghatározható a mozgás. Ezen változók beállításával és kiolvasásával egy tetszőleges mozgás adható meg (belsőleg ez megváltoztatja a hspeed és vspeed értékeit). Létezik ezenkívül a súrlódás, a tömegvonzás és a tömegvonzás iránya. Végül a motion_add(irany,sebesseg) függvénnyel egy mozgás adható a pillanatnyihoz.

x - x-helyzet (a képernyő oszlopa).
y - y-helyzet (a képernyő sora).
xprevious - az előző x-helyzet.
yprevious - az előző y-helyzet.
xstart - kezdő x-helyzet a pályán.
ystart - kezdő y-helyzet a pályán.
hspeed - vízszintes elmozdulás sebessége (pozitív szám: jobbra mozgás, negatív: balra).
vspeed - függőleges elmozdulás sebessége (pozitív szám esetén le, negatívnál fölfelé mozog).
direction - aktuális irány (0-360, az óramutató járásával ellenkező irányban, 0 = jobbra).
speed - aktuális sebesség (lépésenkénti képpontok).
friction - aktuális súrlódás (lépésenkénti képpontok).
gravity - aktuális tömegvonzás (lépésenkénti képpontok).
gravity_direction - tömegvonzás iránya (270 a lefelé irányuló).
motion_set(ir,seb) - mozgás beállítása ir irányba, seb sebességgel.
motion_add(ir, seb) - mozgás hozzáadása az aktuális mozgáshoz (mint egy vektor hozzáadása).
place_free(x,y) - ütközésmentes-e az (x,y) koordinátájú hely. Gyakran használatos ellenőrzésre a példány új helyre való mozgatásakor.
place_empty(x,y) - üres-e az (x,y) koordinátájú hely. Ez a függvény a nem szilárd példányokat is számításba veszi.
place_meeting(x,y,obj) - találkozik-e a példány (x,y) helyen az obj objektummal. Obj lehet az objektum neve, azonosítója (id), vagy az all, illetve other különleges változók.
place_snapped(vracs,fracs) - a példány a rácsértékek szerint van-e igazítva.
move_random(vert,fert) - a példány mozgatása egy véletlenszerű szabad helyre a megadott értékhatárokon belül.
move_snap(vert,fert) - a példány mozgatása a rácsértékekhez igazítottan.
move_wrap(vsz,fug,perem) - a példány áthelyezése a másik oldalra, mikor elhagyja a pályát. A vsz jelzi, hogy az áthelyezés vízszintes-e, fug hogy az áthelyezés függőleges-e. A perem jelzi, hogy a példány eredetének (Origin) milyen távol kell lennie a pályától, mielőtt az áthelyezés megtörténik. Ez a függvény jellemzően a Kívül (Outside) eseményben használatos. A GM 6-os változatától használható.
move_towards_point(x,y,seb) - mozgatás (x,y) pont irányába seb sebességgel. Az adott pontban nem fog megállni! Ha azt akarjuk, hogy megálljon, akkor ez megoldható pl. azzal a módszerrel, hogy a célkoordinátákat elmentjük egy-egy változóba (pl. celx és cely), igazra állítunk egy mozgást ellenőrző változót (pl. mozog), majd a Lépés eseményben ennek igaz volta esetén ellenőrizzük, hogy a példány elérte-e az adott pontot, s ha igen, akkor megállítjuk és beállítjuk a megfelelő változóértékeket, ami a példában szereplők alapján a következő módon történhet:
if mozog==true
if position_meeting(celx,cely,self)
{motion_set(0,0); celx=noone; cely=noone; mozog=false}
Fontos, hogy az eredet (origin) a kép közepén legyen, hogy a tárgy biztosan keresztezze a mozgás célját jelölő pontot. A példa nemcsak a move_towards_point, hanem a motion_set függvénnyel is alkalmazható, melynél az irány a point_direction függvénnyel adható meg.
move_bounce_solid(pon) - visszapattanás szilárd tárgyakról. Pon igazra állítása esetén nemcsak egyenes, hanem ferde falakról is pontos lesz a visszapattanás.
move_bounce_all(pon) - visszapattanás minden tárgyról.
move_contact_solid(ir,maxtav) - a példány mozgatása ir irányba, míg el nem ér egy szilárd objektumot. Ebben az esetben megáll. A maxtav-val a távolság nagysága állítható be (negatív szám megadásával tetszőleges a távolság).
move_contact_all(ir,maxtav) - hasonlít az előzőre, de ennek alkalmazásával megáll minden ütközéskor, nemcsak a szilárd tárgyaknál.
move_outside_solid(ir,maxtav) - a példány mozgatása ir irányba, amíg már nem fekszik egy szilárd tárgyon belül. Ha a pillanatnyi helyen nincs ütközés, akkor nem mozdul el.
move_outside_all(ir,maxtav) - hasonlít az előzőre, de ez minden tárgyra érvényes, nemcsak a szilárdakra.
distance_to_point(x,y) - az aktuális objektumot határoló doboz (bounding box) távolsága (x,y) ponttól.
distance_to_object(obj) - az aktuális objektumot tartalmazó doboz távolsága obj objektumtól.
position_empty(x,y) - értéke igaz, ha (x,y) helyen nincs semmi.
position_meeting(x,y,obj) - értéke igaz, ha az (x,y) helyen van az obj objektum. Az obj lehet az objektum neve, azonosítója, vagy a self, other és all kulcsszavak.
path_index - a követendő nyomvonal jelzőszáma. A -1-re állítás jelenti, hogy nincs nyomvonal. (Az 5.3-as változatban ez a függvény csak lekérdezhető!)
path_position - elhelyezkedés az aktuális nyomvonalon. 0 a nyomvonal kezdetét, 1 a végét jelenti, az értéknek 0 és 1 közé kell esnie.
path_orientation - a nyomvonal tájolása (az óramutató járásával ellenkező irányban). A 0 a normális elhelyezkedést jelzi.
path_scale - a nyomvonal méretezése. Növelésével a nyomvonal nagyobb lesz. 1 az alapértelmezett érték.

A következő öt függvény a GM 5.3-as változatától használható:

path_start(nyomv,seb,veges,absz) - egy nyomvonal indítása a tárgy számára. A nyomv az indítandó nyomvonal neve. Seb a sebesség, mellyel a nyomvonalat követni kell. Negatív sebességérték az ellenkező irányba való haladást jelenti. Veges jelöli, hogy a nyomvonal végén milyen esemény történjen: 0=megállás, 1= újrakezdés a kiindulóponttól (ha nem önmagába zárt a nyomvonal, akkor ugrás a kezdőpontra), 2=folytatás a jelenlegi helytől, 3=elindulás az ellenkező irányba, vagyis a sebesség előjelének megváltoztatása. Az absz értéke igaz vagy hamis lehet. Igaz esetén a nyomvonal abszolút koordinátái használtak, míg hamis esetén a nyomvonal viszonylagos a tárgy pillanatnyi helyzetéhez képest. Pozitív sebesség esetén a nyomvonal kiindulópontja a pillanatnyi helyre kerül, és onnan kezdődik. Negatív sebesség esetén a nyomvonal végpontja kerül a pillanatnyi helyre, és attól kezdve követi azt visszafelé a nyomvonal.
path_end() - a nyomvonal követésének befejezése a tárgy számára.
path_index - a jelenlegi nyomvonal indexe, amit a példány követ. Közvetlenül nem változtatható meg, de a fentebbi függvénynek használnia kell. GM 7-től.
path_position - a jelenlegi nyomvonal helyzete. 0 a nyomvonal kezdete, 1 pedig a vége. Az értéknek 0 és 1 között kell lennie. GM 7-től.
path_positionprevious - a tárgy előző helye a jelenlegi nyomvonalon. Ez pl. az ütközés eseménynél használható fel, hogy a tárgy kerüljön vissza az előző helyére.
path_speed - a sebesség (képpont/lépés), mellyel a nyomvonalon haladni kell. A negatív sebességérték használható a visszafelé mozgatásra.
path_orientation - irányultság (óramutató járásával ellentétes), melybe a nyomvonal végrehajtódik. 0 a normális irányultsága a nyomvonalnak. GM 7-től.
path_scale - a nyomvonal méretezése. Növelésével a nyomvonal nagyobb lesz. Az alapértelmezett érték az 1. GM 7-től.
path_endaction - a nyomvonal végénél történő cselekvés. A path_start függvénynél használt értékek használhatók itt is.

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