编辑:这对我来说更有意义,因为我已经离开了代码,谢谢你的帮助.
刚刚通过Coding Horror发现堆栈溢出,它看起来很棒.我想向社区询问我目前正在尝试解决的问题.
我正在使用j2me为midp 2.0手机开发一款roguelike游戏.该项目仍然处于开发的基本阶段,因为我弄清楚它是如何运作的.我目前坚持的部分与线程有关.
游戏有一个自定义HaxCanvas
类,它扩展了GameCanvas和Implements runnable.它的run方法调用repaint()然后休眠50 ms,导致帧速率为20 FPS.这使我可以编写游戏的其余部分,而无需在任何地方放置重绘,并且应该使动画和效果更容易在以后进行.(至少在理论上).
游戏的流程由GameManager类控制,该类循环遍历地图上的所有NPC,轮流进行,直到玩家轮到.此时我需要输入以允许玩家四处移动和/或攻击事物.我最初是在调用我gameManager.runUntilHeroTurn()
的keyPressed
方法HaxCanvas
.然而,在阅读了j2me系统线程之后,我意识到在回调中放置一个可能会运行一段时间的方法是一个坏主意.但是我必须使用keyPressed来输入handeling,因为我需要访问数字键,并且getKeyStates()
不支持这个.
Sofar我尝试将我的游戏循环放入其自己的线程中导致了灾难.在游戏运行了几次之后,出现了一个没有堆栈跟踪的奇怪的"未捕获的ArrayIndexOutOfBoundsException".
所以我想我的问题是:
对于j2me中的"回合制"游戏,实现游戏循环的最佳方式是什么,只有当玩家轮到你时才允许输入游戏?
虽然不是j2me特别是你应该捕获用户输入,但一般的策略是将输入排队,直到处理输入为止.
input ---> queue <---> Manager(loop)
这样,您甚至可以编写脚本输入以进行调试.
所以你不需要新的线程.每次用户按下键时,都会将它们存储在缓冲区中,然后在必要时处理缓冲区的内容.如果玩家缓冲区没有输入,管理员应该跳过所有游戏玩法,做动画然后重新开始(因为游戏不是动作游戏).