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



ÚTVONALTERVEZÉS: (GM 5.3-tól)

Az ezzel kapcsolatos függvények egy másik csoportja ütközésmentes nyomvonalat számít. Ha ez a nyomvonal elkészült, hozzá lehet rendelni egy tárgyhoz. A nyomvonal kiszámítása némileg időigényes, de végrehajtása már gyors. Mindez persze csak akkor működik, ha a helyzet időközben nem változik. Ilyenkor (pl. ütközés esetén) újra kell számítani a nyomvonalat.
Az első két függvény egyenes vonalú mozgást valósít meg:

mp_linear_path(nyomv,xc,yc,lepesm,ellmind) - egy egyenes vonalú nyomvonal számítása a tárgy pillanatnyi helyétől xc,yc helyig, a jelölt lépésméretet használva. A lépéseket az mp_linear_step függvényhez hasonlóan használja. A jelzett útvonalnak már léteznie kell, és felül lesz írva az újjal. A függvény visszatér, hogy található-e nyomvonal. Megáll és hibát jelez, ha nincs egyenes útvonal a kiindulási és célpont között. Hiba esetén is létrehoz egy nyomvonalat, mely addig a pontig tart, ahol a tárgy megakadt.
mp_linear_path_object(nyomv,xc,yc,lepesm,obj) - hasonló az előzőhöz, de most csak obj tárgy példányai vannak figyelembevéve mint akadályok. Az obj lehet egy tárgy vagy példányazonosító. GM 6.1-től.
mp_potential_path(nyomv,xc,yc,lepesm,ellmind,tenyezo) - egy nyomvonal számítása a tárgy pillanatnyi helyétől xc,yc helyig, a jelölt lépésméretet használva, elkerülve az akadályokkal való ütközést. Az mp_potential_step függvénybeni lépésmezőket használja, és a paraméter még beállítható az mp_potential_settings függvényben is. A jelzett útvonalnak már léteznie kell, és felül lesz írva az újjal. A függvény visszatér, hogy található-e nyomvonal. Az örökös számítás elkerülésére a tenyezo hosszát 1-nél nagyobbra kell állítani. A függvény megáll, és hibát jelez, ha nem talál a tényezőidőnél rövidebb nyomvonalat a kiindulópont és a cél között. Hiba esetén is létrejön egy nyomvonal, ami a cél felé indul, de nem fogja elérni.
mp_potential_path_object(nyomv,xc,yc,lepesm,ellmind,obj) - hasonló az előzőhöz, de most csak obj tárgy példányai vannak figyelembevéve mint akadályok. Az obj lehet egy tárgy vagy példányazonosító. GM 6.1-től.

A következő függvények a rács-alapú megközelítéssel egy még összetettebb mechanizmust használnak (néha A* algoritmusnak nevezik). Ez még sikeresebbé teszi a nyomvonalak megtalálását (bár hibák itt is előfordulhatnak), és ezek hossza is rövidebb lehet.
Először is elhelyezünk egy finom vagy durvább (ez gyorsabb lesz) rácsot a pályán. Azután minden fontos tárgynak meghatározzuk a rácscelláját az átfedésével (használva a foglalatát vagy a pontos ellenőrzést), és megjelöljük ezeket a cellákat tiltottnak. Így egy cella teljesen tiltott lesz, még akkor is, ha csak részben van átlapolva egy akadállyal. Végül meghatározunk egy kiindulópontot és egy célt (melyeknek szabad cellákban kell lenniük), és a függvény kiszámítja a legrövidebb utat ezek között. A nyomvonal a szabad cellák közepén fog futni. Ha a cellák elég nagyok, a közepébe elhelyezett tárgyat teljesen magukbafoglalják. Ez a nyomvonal most már hozzárendelhető egy tárgyhoz.

A rács-alapú megközelítés nagyon hatásos (és sok profi játékban használják), de szükséges, hogy néhány dolgot jól átgondoljunk. Meg kell határozni, hogy mely terület és cellaméret felel meg a játéknak, hogy mely tárgyakat kell kikerülni, és szükséges-e a pontos ellenőrzés. Ezek a paraméterek erősen befolyásolják a megközelítés hatásosságát.

Különösen a cella mérete a döntő. Emlékezzünk vissza arra, hogy a celláknak elég nagyoknak kell lenniük a mozgó tárgy befogadására (tudjuk biztosan a tárgy eredetpontját (origin), és tudjunk arról is, hogy a nyomvonal elmozdítható, ha a tárgy eredetpontja nincs a közepén). Ha a cellák túl nagyok, könnyen mind tiltott lehet, mert átvághatnak egy akadályt.
A következő függvények használhatók:

mp_grid_create(bal,teteje,vcellak,fcellak,cellasz,cellam) - egy rács létrehozása. Egy indexszel tér vissza, amely a további hívásokra használható. Több rácsszerkezet is létrehozható és fenntartható egyazon időben. Bal és teteje jelzik a rács sarkát a bal oldalánál és a tetejénél. Vcellak és fcellak a cellák száma vízszintesen és függőlegesen, az utolsó két paraméter pedig a cellák szélessége és magassága.
mp_grid_destroy(id) - a jelzett rács megsemmisítése, és az általa használt memória felszabadítása. Ne felejtsük ezt hívni, ha már nincs szükségünk a szerkezetre.
mp_grid_clear_all(id) - minden cella szabadnak jelölése.
mp_grid_clear_cell(id,v,f) - az adott cella törlése. A 0,0 a bal fölső sarokban lévő.
mp_grid_clear_rectangle(id,bal,teteje,jobb,alja) - az adott területen minden cella törlése.
mp_grid_add_cell(id,v,f) - az adott cella tiltottá tétele. A 0,0 a bal fölső sarokban lévő.
mp_grid_add_rectangle(id,bal,teteje,jobb,alja) - a jelölt területen minden cella tiltása.
mp_grid_add_instances(id,obj,pontosan) - minden cella megjelölése olyanná, hogy átvágják az adott tárgyat, azaz tiltottak lesznek. A tárgy példányának id-je is megadható, valamint az all kulcsszó is. Pontosan jelzi, hogy a pontos ütközésérzékelést kell-e használni (csak akkor működik, ha a tárgynál is be van állítva).
mp_grid_path(id,nyv,xstart,ystart,xcel,ycel,atlos) - egy nyomvonal számítása a rácson keresztül. Nyv egy létező
nyomvonal kell, hogy legyen, ami át lesz írva az újjal, melynek xstart,ystart a kiinduló-, és xcel,ycel a végpontja. Atlos jelzi, hogy az átlós mozgás megengedett-e a vízszintes vagy függőleges helyett. A függvény visszatér, hogy sikerült-e találnia egy nyomvonalat (a nyomvonal a jelenlegi tárgy példányától függ; a rácson megy keresztül, és nem egy előírt példányé).
mp_grid_draw(id) - kirajzolja a rácsot, melyben a zöld cellák a szabadok, és a pirosak a tiltottak. Lassúsága miatt ezt csak hibakereső módban használjuk.