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