Niedawno przestawiłem silnik gry z kierowania na ruch oparty na impulsie z odpowiednią rozdzielczością kolizji opartą na czasie. To rozwiązało tak wiele problemów (koniec tunelowania, tak) i sprawiło, że symulacja jest znacznie bardziej stabilna. Jednak wraz ze stabilnością pojawił się nowy problem.
Trzy kule rozpoczęły podróż w dolnej części obrazu, ich celem było zatrzymanie różowej kuli. Po drodze czerwone i zielone kulki utknęły w miejscu dławika w ścianie.
Wcześniej mogłem polegać na błędach zmiennoprzecinkowych i ogólnej niestabilności zachowań sterujących, aby zielone i czerwone kule przepychały się nawzajem, dopóki nie zdołały przedostać się przez punkt dławienia. Teraz przy odpowiedniej rozdzielczości kolizji siły działające na kulki znoszą się nawzajem, co powoduje, że kulki pozostają idealnie nieruchome.
Jakie metody są powszechnie stosowane w celu rozwiązania takich sytuacji? Być może zadziałałby jakiś system kolejkowania priorytetowego, chociaż widzę, że staje się on złożony, gdy muszę zdecydować o priorytecie między więcej niż 2 obiektami.
źródło
Odpowiedzi:
Przypisz każdemu ruchomemu obiektowi unikalny indeks i zabraniaj obiektowi o wyższym indeksie przemieszczania agenta o niższym indeksie. Umożliwi to „starszym” obiektom przesuwanie „nowszych”, ale nie odwrotnie i jest mniej obciążający niż kolejkowanie. Zasadniczo indeks działa jako priorytet ruchu.
źródło
dodaj czas na szukanie ścieżki
tutaj jest artykuł, który mówi o tej kostce czasu: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf
a oto implementacja Objective-C: http://allseeing-i.com/ASIPathFinder
źródło
Właściwie nie sądzę, że powinieneś to naprawić. Jeśli (zgaduję) strzałki wskazują wektory siły przyłożone do dowolnej kuli, w dowolnej pozycji na siatce (prawdopodobnie interpolowanej „dwu-liniowo” lub podobnie, lub w jakiś sposób bardziej „analogowej” niż po prostu 0/1), to wtedy zachowanie jest poprawne fizycznie i należy pogratulować sobie dobrze zachowującego się rozwiązania.
Dwie kule są w równowadze, ponieważ siedzą tam i nienawidzą się nawzajem. Najwyraźniej, jeśli poruszą się nieco w prawo, „strzałka siły” w prawo wpływa nieco bardziej na prawą sferę boczną (i odwrotnie na lewą sferę; nieco mniej), a więc wracają do równowagi. To jest takie, jakie powinno być.
Imho, co powinno zostać naprawione, to rozmiar ściany lub kuli lub coś innego wśród samych kamieni konstrukcyjnych. Stworzyłeś niemożliwość, a prawidłowe zachowanie w tej sytuacji jest impasem (przepraszam za niewłaściwe słowa, mam nadzieję, że i tak je dostaniesz :-)).
Być może zamiast tego wyłącz najbliższe strzałki siły w lewo / prawo lub ustaw je w inny sposób, który nie jest symetryczny i nie zachęca do równowagi ?
Myślę, że sztucznie byłoby to naprawić ... byłoby zbyt wcześnie owłosione.
źródło