jestem programowania gier dachówka 2D opartych na Javie jak Bomberman (moja pierwsza gra).Jak koordynować położenie graficzne i logiczne w grze opartej na kafli 2D przy użyciu tablicy?
Używam tablicy 2D do przedstawienia mapy, na której śledzę ściany, miejsca do chodzenia itp. Do tej pory byłem w stanie sprawić, że gracz poruszał się płynnie zmieniając duszki w zależności od klawisza kierunkowego, który naciska (ale nie wchodził w interakcje z tło/mapę, może chodzić losowo i wyjść z ekranu).
Mój problem pojawia się, gdy chcę śledzić pozycję gracza w tablicy. Logicznie postać zawsze należy do tylko jednego pola, ale graficznie może znajdować się pomiędzy dwoma kaflami. Jak mogę rozwiązać ten problem?
ja już próbowałem:
currentTileArrayX = x/tileWidth;
currentTileArrayY = Y/tileHeight;
Gdzie x i y są lewymi górnymi współrzędnymi ikonki. Ale wszystko stało się bardzo niebezpieczne, ponieważ spriterze gracza nie mają tego samego rozmiaru co kafelki.
Miałem inną opcję, która rozwiązałaby poprzedni problem: Kiedy gracz naciśnie klawisz kierunkowy, przesuń go do następnego pola, tak jak animację. To nie pozwoliłoby graczowi zatrzymać się w środku dwóch płytek ... Ale co, jeśli przerywa to innym klawiszem? Jak mogę zatrzymać działanie użytkownika podczas wykonywania animacji? Myślę, że to najłatwiejsze rozwiązanie, ale nie wiem, jak go wdrożyć.
Próbowałem już znaleźć rozwiązanie w innych kwestiach, ale nie miałem szczęścia. Mam nadzieję że możesz mi pomóc.
Wielkie dzięki.
Nupul zmieniłem kod za pomocą numeru jedno rozwiązanie. Dzięki temu rozwiązał wiele błędów, mógłbym powiedzieć, że prawie teraz działa. Ale mam jeszcze jeden problem: http://imageshack.us/f/687/bomberbug.png/ Mam nadzieję, że wyjaśniłem to poprawnie w obrazie. – Rama
Na obrazie bieżące położenie pozostaje czerwoną płytką. Ponieważ czerwony kafelek jest prawy, jest wolny, mogę iść w prawo, ale graficznie nie mogę. – Rama
@Rama: Nie jest jasne, co masz na myśli ... Jeśli MOŻESZ iść w prawo, to "dlaczego nie?" Po drugie, jeśli "graficznie" nie da się tego zrobić, to dane również strukturalnie nie powinny być dozwolone. Twój model wewnętrzny musi być dokładną reprezentacją Twojego widoku. Jeśli nie mogę pójść w prawo w modelu, nie powinienem mieć do tego prawa w widoku, a nie odwrotnie, ponieważ widok jest dziesiętnie zorientowany, by tak rzec, v.v.v.v. Czy mógłbyś wyjaśnić problem nieco bardziej, jeśli nie zrozumiałem go poprawnie? – PhD