Moim rozwiązaniem byłoby potraktowanie każdej fizycznej istoty na mapie gry jako węzła drzewa , a sama mapa jako węzła głównego . Węzły mogą zawierać inne węzły. Każdy węzeł jest zawarty (bezpośrednio lub pośrednio) wewnątrz węzła mapy.
Załóżmy na przykład, że twoja postać stoi na platformie. Węzeł platformy zawiera węzeł postaci. Tak więc, ilekroć platforma się porusza, poruszają się również zawarte w niej węzły (w tym przypadku postać).
Aby tak się stało, każdy węzeł powinien mieć pozycję (x, y) względem węzła nadrzędnego . Na przykład twoja postać może znajdować się w (1,0) względem platformy, która sama może znajdować się w (10,10) w stosunku do mapy gry. W ten sposób, jeśli platforma się poruszy, twoja postać będzie się poruszać niejawnie.
W tym hierarchicznym drzewie pozycja każdego węzła jest równa sumie jego pozycji plus pozycji każdego z jego węzłów nadrzędnych. Powiedzmy, że chcemy uzyskać pozycję postaci na mapie. Obliczamy:
(pozycja znaku) + (pozycja węzła nadrzędnego) + (pozycja węzła głównego) = (1,0) + (10,10) + (0,0) = (11,0)
OK, więc przez cały czas twoja postać stała na platformie. Co ze skokami? Cóż, w momencie, gdy skacze, odłączasz go od platformy i dołączasz do węzła zawierającego platformę ; w tym przypadku mapa (węzeł główny).
Kiedy wyląduje ponownie, podłącz go do dowolnego węzła, na którym wylądował.
Sugerowałbym potraktowanie tego jako problemu pseudofizycznego i rozwiązanie go za pomocą tarcia o podłoże.
Już używasz grawitacji, aby utrzymać postać na ziemi, to obsługuje sytuacje, w których platformy poruszają się w górę i w dół. Aby obsłużyć lewy i prawy ruch, podłoże powinno wywierać duży wpływ na postać. Zazwyczaj ten poziom tarcia wynosiłby 1,0 lub 100%.
Jeśli postać stoi w miejscu, jej prędkość wynosi 0, a zamiast tego dziedziczy 100% prędkości platformy z powodu tarcia. Coś w stylu:
Zaletą tego podejścia jest to, że z łatwością nadaje się do dodatkowej mechaniki platformowania, na przykład do pokonania tarcia na stromych zboczach, umożliwiając twojej postaci ślizganie się. Pozwala także łatwo zmniejszyć tarcie, tworząc lód, po którym ślizgać się będzie postać.
Łatwiej jest również poradzić sobie z problemami takimi jak niskie wiszące ściany, które mogą zrzucić gracza z ruchomej platformy. Jeśli po prostu traktujesz tę postać jak dziecko platformy nadrzędnej, istnieje duża szansa, że nie będzie ona łatwo oddziaływać z resztą wykrycia kolizji bez dużego nakładu pracy.
źródło
Możesz ustalić pozycję gracza nie „absolutnie na poziomie”, ale „względem platformy”, a następnie mieć funkcję, która podaje jego rzeczywistą pozycję. Nie podoba mi się to.
Prawdopodobnie byłoby lepiej (i prościej) powiązać gracza z platformą, aby gdy platforma poruszała się + x / + y, gracz poruszał się tak samo.
źródło