Diskuze: Více pohybujících se nepřátel
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Záleží na tom, jaký systém grafiky máš... Je-li vše ve svém čtvercovém poli, pak jen poměřuješ vzdálenost a poměr ku čtverci nepřítele. Pochopitelně to pak způsobuje problémy vizuální. Proto navrhuji kolizi kružnicovou - nebudeš tedy brát v potaz, že je nestvůra spíše do šířky, ale prostě kolem ní uděláš pomyslnou kružnici. Jen bude v GM asi náročnější vypočítat to s co nejnižšími nároky na PC...
možná špatně pochopeno, problém nemám s tím že vznikne a detekuji kolizi , ale s tim jak ji řešit pro situace 3 a více nepřátel (popřípadně vhodně předcházet).Zkusil jsem několik ruzných reakcí, ale povětšinou to dopadlo tak že se objekt chvíli dost "zmateně" a graficky neesteticky pohyboval než se to vyřešilo.
U takových věcí bývá největší problém optimalizace, abys v každém
průchodu
nekontroloval kolize tisíců objektů. Když kolize blbnou, zkontroluj
masky
všech dotčených sprites a povypínej precision. Všude, kde je to jen
trochu
možné použij čtvercové nebo kruhové masky. Kde to nepomáhá, testuj
vzdálenost
středů např. point_distance(x1,y1,x2,y2). Jakoukoli podmínku, která
omezí
počet testovaných objektů, je dobré použít.
Zdá se, že než jsem to dopsal, už je dotaz trochu jiný.
Pokud se ti nepřátelé "motají", nechávej je po každém posunu
otestovat
na kolize a pokud bude true, vrať ho na xprevious, yprevious. Tím prostě
zůstane stát. Zatímco, když dáš stop pohybu v případě kolize, motají
se
okolo, protože kolize se opakuje v každém stepu.
No přesně to jsem měl na myslim, sprites měl blbnou ve smyslu, že zatím jsem řešil kolizi tím že jsem se snažin změnit úhel pohybu rychlost nebo dokonce i odraz a mám tam daný skript který automaticky mení otočení spritu podle toho kterým de směrem a v takových to chvílich se bláznivě měnil, otáčel z důvodu že kolize nastávala několikrát za vteřinu. Ano point distance , kruhové masky atd jsem schopen nějak zapomponovat jak bude potřeba, ale spíš bych chtěl radu, jak následně řešit situaci, resp jakým směrem se mají nepřátelé vydat (jak to rozhodnout) aby stále mířili k hráči "nějak" a zároveň si navzájem nepřekáželi. (něco na způsob avoid obstacles) ale pro pohyblivý objetky
No kvalitní AI motion plannig je jeden z nejobtížnějších úkolů
vůbec.
Zkus mp_potential_path_object a nech si cestu ukazovat v debug módu,
abys viděl, co to reálně spočítalo.
hm a jak si mám nechat ukázat cestu v debug modu, nějak to nemužu dohledat
Je to path, takže draw_path.
Samosebou if debug_mode.
Taky by možná stálo za pokus, zpomalovat pohyb v případě,
že za N stepů dojde ke kolizi. Tzn. např. ověřím 11 stepů napřed
a pokud dojde ke kolizi na některém z nich, zpomalím o 10%.
Čímž docílím, že pokud má dojít k nárazu hned, objekt zastaví
hned.
Jinak jen zpomaluje a doufá, že překážka uhne nebo zmizí.
No povedlo se mi na foru najít tohle http://host-a.net/…Handlers.gmk
a po chvilce úprav to zatím funguje dobře, ještě to chce upravit pro moji
potřebu a doladit další věci (viz to zpomalování + budu muset naučit
postavu hráče správě interagovat, ale tohle dost pomohlo)
To vypada celkem názorně. Právě se tam dodržují základní tvary
a jednoduché dráhy, jak jsme tady psali. Hezký příklad.
Zobrazeno 13 zpráv z 13.