Chcę mieć grywalną postać, która może „chodzić” po organicznej powierzchni pod dowolnym kątem, w tym na boki i do góry nogami. Przez „organiczne” poziomy ze skośnymi i zakrzywionymi elementami zamiast linii prostych pod kątem 90 stopni.
Obecnie pracuję w AS3 (umiarkowane doświadczenie amatorskie) i używam Nape'a (całkiem początkującego) do podstawowej fizyki opartej na grawitacji, dla której ta mechanika chodzenia będzie oczywistym wyjątkiem.
Czy istnieje proceduralny sposób wykonania tego rodzaju mechaniki chodzenia, być może przy użyciu ograniczeń Nape'a? A może najlepiej byłoby utworzyć wyraźne „ścieżki” idące po konturach płaskich powierzchni i użyć ich do ograniczenia ruchu chodzenia?
actionscript-3
physics
movement
platformer
Eric N.
źródło
źródło
Odpowiedzi:
Oto moje pełne doświadczenie w nauce, dzięki czemu powstała całkiem funkcjonalna wersja pożądanego przeze mnie ruchu, wszystko przy użyciu wewnętrznych metod Nape. Cały ten kod należy do mojej klasy Spider, czerpiąc niektóre właściwości od jego rodzica, klasy Level.
Większość innych klas i metod jest częścią pakietu Nape. Oto istotna część mojej listy importów:
Po pierwsze, kiedy pająk jest dodawany do sceny, dodaję słuchaczy do świata Nape w celu kolizji. W miarę rozwoju będę musiał różnicować grupy kolizji; na razie te wywołania zwrotne będą technicznie uruchamiane, gdy JAKIEKOLWIEK ciało zderzy się z innym ciałem.
Oddzwaniania zmieniają właściwość „stanu” pająka, która jest zbiorem boolanów, i zapisują dowolnych arbitrów kolizji Nape do późniejszego wykorzystania w mojej logice chodzenia. Ustawiają także i usuwają toTimer, co pozwala pająkowi stracić kontakt z równą powierzchnią na czas do 100 ms, zanim znów pozwoli na to, by grawitacja świata znów się utrzymała.
Na koniec obliczam, jakie siły zastosować do pająka na podstawie jego stanu i jego związku z geometrią poziomu. Przeważnie pozwolę, by komentarze mówiły same za siebie.
Naprawdę lepką częścią, którą znalazłem, było to, że kąt ruchu musiał być w rzeczywistym pożądanym kierunku ruchu w scenariuszu z wieloma punktami kontaktowymi, w którym pająk osiąga ostry kąt lub siedzi w głębokiej dolinie. Zwłaszcza, że biorąc pod uwagę moje zsumowane wektory siły adhezji, siła ta będzie ciągnąć DALEJ od kierunku, w którym chcemy się poruszać, zamiast prostopadle do niej, więc musimy temu przeciwdziałać. Potrzebowałem więc logiki, aby wybrać jeden z punktów styku, który posłużyłby jako podstawa kąta wektora ruchu.
Efektem ubocznym „przyciągania” siły przyczepności jest niewielka niepewność, gdy pająk osiągnie ostry kąt / wklęsły kąt, ale w rzeczywistości jest to trochę realistyczne z punktu widzenia wyglądu, więc jeśli nie spowoduje problemów na drodze, zostaw to tak, jak jest. W razie potrzeby mogę użyć wariantu tej metody do obliczenia siły przyczepności.
Ta logika jest prawie „idealna”, ponieważ wydaje się, że do tej pory robi to, co chcę. Pozostaje jednak kwestia kosmetyczna, która polega na tym, że jeśli spróbuję dopasować grafikę pająka do siły przyczepności lub siły ruchu, stwierdzę, że pająk „pochyla się” w kierunku ruchu, co byłoby w porządku, gdyby był dwunogi atletyczny sprinter, ale nie jest, a kąty są bardzo podatne na zmiany terenu, więc pająk drży, gdy przechodzi przez najmniejsze uderzenie. Mogę zająć się wariantem rozwiązania Byte56, próbkując pobliski krajobraz i uśredniając te kąty, aby orientacja pająka była płynniejsza i bardziej realistyczna.
źródło
Co powiesz na wykonanie jakiejkolwiek „lepkiej” powierzchni, której dotknie postać, przyłoży siłę wzdłuż odwrotnej normalnej powierzchni? Siła pozostaje tak długo, jak długo styka się ona z powierzchnią i zastępuje grawitację, dopóki jest aktywna. Zatem zeskoczenie z sufitu spowoduje oczekiwany efekt upadku na podłogę.
Prawdopodobnie zechcesz zaimplementować inne funkcje, aby działało to płynnie i było łatwiejsze do wdrożenia. Na przykład zamiast tego, czego dotyka postać, użyj okręgu wokół postaci i podsumuj odwrócone normalne. Jak pokazuje ten gówniany obraz farby:
(Przedstawione podobieństwo pająka jest własnością Byte56)
Niebieskie linie są odwrotnymi normalnymi do powierzchni w tym punkcie. Zielona linia to sumowana siła przyłożona do pająka. Czerwone kółko oznacza zasięg, którego pająk szuka normalnych do użycia.
Pozwoliłoby to na pewną wyboistość w terenie bez pająka „tracącego przyczepność”. Jeśli chodzi o rozmiar i kształt koła, możesz po prostu użyć półkola skierowanego pająkiem w dół, a może po prostu prostokąta obejmującego nogi.
To rozwiązanie pozwala utrzymać włączoną fizykę, bez konieczności zajmowania się określonymi ścieżkami, którymi może podążać postać. Wykorzystuje również informacje, które dość łatwo można uzyskać i zinterpretować (normalne). Wreszcie jest dynamiczny. Nawet zmiana kształtu świata jest łatwa do rozliczenia, ponieważ można łatwo uzyskać normalne dla dowolnej rysowanej geometrii.
Pamiętaj, że gdy żadna twarz nie znajduje się w zasięgu pająka, przejmuje normalna grawitacja.
źródło