我已经完成了一系列关于J2ME游戏开发的问题,在最近的一篇中,Neil Coffey发表了评论
作为一个侧面问题 - 你真的想要吗? 在J2ME游戏中做100个滴答/秒? 正如我想的那样,你提到了 应该真的睡到下一个 想要的唤醒点,不是固定的 每次持续时间。
出于某种原因,那件事情在我脑海中浮现,现在我想要答案,我需要做什么才能使我的游戏循环睡眠到所需的唤醒点,我真的不知道那点是xD(理论上讲)。
为了反馈,这是我的游戏循环的简化版本:
public void run() {
Graphics g = this.getGraphics();
while (running) {
long diff = System.currentTimeMillis() - lastLoop;
lastLoop = System.currentTimeMillis();
input();
this.level.doLogic();
render(g, diff);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
stop(e);
}
}
}
感谢您的帮助!!
答案 0 :(得分:3)
如果您还没有阅读过,那么有一篇关于游戏循环here的优秀文章。
根据我编写J2ME游戏的经验,你会希望尽量减少你在游戏循环中做多少事情,因为写得不好的游戏循环会很快耗尽手机的电池电量。也就是说,如果你要渲染10毫秒,请务必检查是否有任何变化,如果没有,请跳过它。
答案 1 :(得分:1)
如果你决定每10毫秒渲染一次,那么你:
loop {
- record current time; render
- do input/logic
- check the current time, and calculate elapsed time
- if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}
我知道定时器解析可能存在问题(例如,Thread.sleep(10)可能无法正好睡眠10毫秒;而System.currentTimeMillis()可能无法返回粒度低至1毫秒的结果)。这取决于平台。