GTA Közösség - A magyar GTA fórum
San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: vityaa - 2014. július 29. - 18:31:28
-
Sziasztok! Azt szeretném lekérni valahogy, hogy melyik (jármû)kerék (pontosabban a jármû melyik kereke) van a legközelebb egy bizonyos ponthoz. Elõre is köszönöm!
-
A GetVehicleModelInfo függvény segítségével lekérdezed az adott jármû hosszát és szélességét, illetve a GetVehiclePos függvény segítségével az adott jármû pozícióját, majd egy kis matematikával meghatározod a kerekek helyzetét. Ezek után már egyszerû dolgod van; csak meg kell nézned, hogy melyik kapott pozíció van a legközelebb a kérdéses ponttól.
-
Na ezaz, hogy a matek részére nem jövök rá :(
-
Matek és logika nélkül mégis hogyan szeretnél te programozni? :confused:
Az még kimaradt, hogy az adott jármû rotációját is figyelembe kell venni. Na, így már nem is olyan egyszerû a képlet. Egy biztos: ezen fárasztó nap után nem fogok most nagy matekozásba kezdeni, bocsi. :confused:
Hehe, ZyZukám már adja is a -t, mert ki mertem mondani, matek és logika nélkül nem igazán fog neki menni ez az egész dolog. Meg kell küzdeni a megvalósításáért, fejben.
-
A GetVehicleModelInfo-val lekérheted az elsõ és a hátsó két kerék közötti pontokat is.
A kocsi szélességének a felét kivonod a két kerék közti pozícióból, és megkapod a kerék pozícióját nagyjából.
A legközelebbihez pedig kell egy legközelebbi változó (kerék tárolására, annak a kocsinak a kereke, amelyik a legközelebb van, 1, 2, 3, vagy 4), egy távolság és egy ideiglenes változó. A legközelebbi alapból a legelsõ. Végigfutsz minden koordinátán, minden iterációnál lekéred az ideiglenes változóba az éppen adott ponttól vett távolságot, és ha ez nagyobb, mint az eddig talált legnagyobb, az eddig talált legnagyobb legyen (legnagyobb) egyenlõ a most vizsgálttól vett távolságoddal (ideiglenes változó), a legközelebbi kerék (vagy tömbben található pozíció) ID-jét pedig tárold egy másik változóban. Így megy a legközelebbi játékos, kocsi, 3dtextlabel, object, pickup, BÁRMI lekérés.
Tudtommal a kocsinak a koordinátái saját magához jépest vannak, így nem számí a rotáció, de ha igen, akkor is tele van a hiv. fórum ilyenekkel.
-
KovaNovik, nem számolsz a kocsi rotációjával - melyet én is kifelejtettem elõször. Ha a kocsi rotációja 0, akkor (lehet, hogy pont fordítva van, de most így lesz) szépen kivonod X-bõl a szélesség felét - megtalálva a jobb kerék -, hozzáadod - megtalálva a bal kerék. Ha viszont 180 fokot fordult el, ez az egész felcserélõdik, ha 90/270-et, akkor már más tengelybõl kell kivonni, ha pedig teljesen más iránbya fordul, akkor mindkét tengelybõl különbözõ módon kell kivonni. Remélem érthetõ a dolog, ha nem, bocsi :D
-
Érthetõ, csak már 1001 scriptben megírták, ahol kellett másra. Minek írjak feleslegesen scripteket? :D
Lehet amúgy, hogy egyszerûbb elõszõr megnézni, hogy az elejéhez vagy a hátuljához vagy közelebb. Azok csak koordináták. GetPlayerDistanceFromPoint. if(tav1 < tav2). Ezután, ha nem akarok nagyon számolni (mert ehhez nem értek), akkor csak, 0 90 180 270 360 közül kell meghatározni, hogy a melyikhez van a legközelebb. Ez megmondja, bal, vagy jobb oldalán vagy. De tényleg jobb lenne kiszámolni, és tényleg lusta vagyok most ehhez.