编辑:这对我来说更有意义,因为我已经远离了代码,感谢您的帮助。
前几天通过 Coding Horror 发现堆栈溢出,看起来很棒。图我会向社区询问我目前正在尝试解决的问题。
我正在为 midp 2.0 手机开发一个使用 j2me 的 roguelike 游戏。该项目仍处于开发的基本阶段,因为我正在弄清楚它将如何工作。我目前坚持的部分与线程有关。
该游戏有一个自定义HaxCanvas
类,它扩展了 GameCanvas 并实现了可运行。它的 run 方法调用 repaint() 然后休眠 50 毫秒,导致帧速率为 20 FPS。这使我可以编写游戏的其余部分,而不必到处重新绘制,并且应该使动画和效果在以后更容易完成。(至少在理论上)。
游戏流程由 GameManager 类控制,该类循环遍历地图上的所有 NPC,轮流进行,直到轮到玩家。在这一点上,我需要获得输入以允许玩家四处移动和/或攻击东西。我最初是在调用gameManager.runUntilHeroTurn()
我keyPressed
的HaxCanvas
. 然而,在阅读了 j2me 系统线程之后,我意识到将一个有可能在回调中运行一段时间的方法是一个坏主意。但是我必须使用 keyPressed 进行输入处理,因为我需要访问数字键,并且getKeyStates()
不支持这个。
到目前为止,我试图将我的游戏循环放在它自己的线程中已经导致了灾难。游戏运行了几轮后,出现了一个没有堆栈跟踪的奇怪“未捕获的 ArrayIndexOutOfBoundsException”。
所以我想我的问题是这样的:
对于 j2me 中的“回合制”游戏,实现游戏循环的最佳方式是什么,仅在轮到玩家时才允许输入处理?