Редактировать: Теперь это стало для меня более логичным, когда я отошел от кода, спасибо за помощь.
Только что обнаруженный стек переполнен на днях с помощью Coding Horror, и это выглядит потрясающе. Подумайте, что я бы спросил сообщество о проблеме, которую я сейчас пытаюсь решить.
Я занимаюсь разработкой подобной игре с использованием j2me для телефонов midp 2.0. Проект все еще находится на основных этапах разработки, так как я выясняю, как он будет работать. Часть, на которой я сейчас застрял, связана с многопоточностью.
В игре есть пользовательский класс HaxCanvas
, который расширяет возможности GameCanvas и реализует работоспособность. Это запускает метод вызывает repaint () и затем спит в течение 50 мс, в результате чего частота кадров составляет 20 кадров в секунду. Это позволяет мне писать остальную часть игры без необходимости перерисовывать повсюду, что должно облегчить создание анимации и эффектов в дальнейшем. (по крайней мере, в теории).
Ход игры контролируется классом GameManager, который перебирает всех неигровых персонажей на карте, по очереди, пока не наступит ход игрока. На данный момент мне нужно получить ввод, чтобы позволить игроку перемещаться и / или атаковать вещи. Первоначально я вызывал gameManager.runUntilHeroTurn()
в методе keyPressed
моего HaxCanvas
. Однако, прочитав системные потоки j2me, я понял, что помещать метод с потенциалом на некоторое время в обратный вызов - плохая идея. Однако я должен использовать keyPressed для ввода ввода, поскольку мне нужен доступ к цифровым клавишам, а getKeyStates()
не поддерживает это.
Софар мои попытки поместить мой gameloop в свою собственную ветку привели к катастрофе. Странное «неперехваченное исключение ArrayIndexOutOfBoundsException» без трассировки стека обнаруживается после запуска игры в течение нескольких ходов.
Итак, я полагаю, мой вопрос таков:
Для "пошаговой" игры в j2me, каков наилучший способ реализовать игровой цикл, позволяющий обрабатывать ввод только тогда, когда наступает ход игрока?