Edycja: To czyni mnie bardziej sensownym teraz, gdy zrobiłem krok od kodu, dzięki za pomoc.Gameloop dla j2me "turowej" gry
Po prostu znalazłem przepełnienie stosu na drugi dzień dzięki przerażeniu kodu i wygląda świetnie. Postaraj się zapytać społeczność o problem, który próbuję obecnie rozwiązać.
Zajmuję się tworzeniem roguelike sortof gry przy użyciu j2me dla telefonów midp 2.0. Projekt wciąż znajduje się na podstawowym etapie rozwoju, ponieważ wiem, jak to zadziała. Część, w której obecnie utknąłem, ma związek z wątkami.
Gra ma niestandardową klasę HaxCanvas
, która rozszerza GameCanvas i Implements runnable. Uruchamia wywołania metod repaint(), a następnie śpi przez 50 ms, co daje szybkość 20 klatek na sekundę. To pozwala mi pisać resztę gry bez konieczności umieszczania odświeżania wszędzie i powinno ułatwiać później wykonywanie animacji i efektów. (przynajmniej teoretycznie).
Przepływ rozgrywki kontrolowany jest przez klasę GameManager, która przepuszcza wszystkie NPC na mapie, wykonując swoje skręty, aż do momentu, w którym przyjdzie kolej na gracza. W tym momencie muszę uzyskać dane wejściowe, aby umożliwić graczowi poruszanie się i/lub atakowanie rzeczy. Pierwotnie dzwoniłem pod numer gameManager.runUntilHeroTurn()
w metodzie keyPressed
mojego HaxCanvas
. Jednak po przeczytaniu wątków systemowych j2me zdałem sobie sprawę, że umieszczenie metody z możliwością uruchomienia przez jakiś czas w wywołaniu zwrotnym jest złym pomysłem. Jednak muszę używać keyPressed do ręcznego wprowadzania danych, ponieważ potrzebuję dostępu do klawiszy numerycznych, a getKeyStates()
nie obsługuje tego.
Sofar moje próby umieszczenia mojego gameloop w jego wątku spowodowały katastrofę. Dziwny "nieprzechwycony wyjątek ArrayIndexOutOfBoundsException" bez śladu stosu pojawia się po kilku uruchomieniach gry.
więc przypuszczam moje pytanie jest takie:
Przez „turowa” grę w J2ME, co jest najlepszym sposobem wdrożenia pętlę gry, pozwalając na wejście handeling tylko wtedy, gdy jest to kolej gracza?
Przy okazji, dobre pytanie. +1 – Fostah