Czy istnieje rozsądny łatwy sposób na wdrożenie swobodnego przepływu w izometrycznej grze opartej na kafelkach? Oznacza to, że gracz nie po prostu od razu przeskakuje z jednego kafelka na drugi lub nie zostanie „przyciągnięty” do siatki (na przykład, jeśli ruch między kafelkami był animowany, ale nie można nic zrobić przed zakończeniem animacji). Jestem naprawdę początkującym z czymkolwiek związanym z programowaniem gier, ale z pomocą tej strony i niektórych innych zasobów dość łatwo było zrobić podstawowe rzeczy, ale nie byłem w stanie znaleźć żadnych przydatnych zasobów dla tego konkretnego problemu .
Obecnie improwizowałem coś podobnego: http://jsfiddle.net/KwW5b/4/ (ruch WASD). Ideą tego ruchu było użycie mapy myszy, aby wykryć, kiedy gracz przesunął się na inny kafelek, a następnie odwrócić przesunięcia, i w większości działa poprawnie (każdy róg powoduje przesunięcie gracza do niewłaściwej lokalizacji: patrz http: //www.youtube.com/watch?v=0xr15IaOhrI , co prawdopodobnie wynika z faktu, że nie udało mi się uzyskać pełnej mapy myszy działającej poprawnie), ale nie mam złudzeń, że jest ona nawet blisko dobrego / rozsądnego rozwiązania. Zresztą to głównie po to, żeby zademonstrować, co chciałbym wdrożyć.
źródło
Odpowiedzi:
Przede wszystkim sugeruję zmianę kierunków z: W - góra-lewo S - dół-prawo A - dół-lewo D - góra-prawo
na bardziej intuicyjne: W - góra S - dół A - lewy D - prawy
Jeśli chodzi o twoje obawy, sugeruję, abyś zrobił dwie funkcje, jedną tłumaczącą izometryczne współrzędne kafelków na współrzędne siatki, a drugą na odwrót. W ten sposób możesz po prostu oddzielić MVC, a to ułatwi ci życie przy obliczaniu aktywnego kafelka:
źródło
Jeśli rozumiem, chcesz, aby gracz przesuwał kafelki na kafelki, ale bez skakania. Możesz:
1- Zacznij od płytki t0 i przesunięcia 0
2- Gdy gracz przejdzie na pole t1, ustaw przesunięcie = - (t1 - t0)
3- W aktualizacji odtwarzacza, jeśli przesunięcie nie jest równe 0, zmniejszanie przy użyciu czasu aktualizacji i prędkości odtwarzacza.
4- Możesz użyć przesunięcia == 0, aby sprawdzić, kiedy gracz jest na kafelku.
Dzięki temu otrzymujesz gracza, który porusza się swobodnie na mapie, ale trzyma się płytek.
źródło