我一直在使用this tutorial创建游戏循环。
在标有“FPS依赖恒定游戏速度”的部分中,有一些示例代码包含睡眠命令
我用java搜索等效文件,发现它是
Thread.sleep();
但它在eclipse中返回错误
Unhandled exception type InterruptedException
这究竟是什么意思。
我也想知道
是什么update_game();
display_game();
方法可能包含在一个opengl-es游戏中(即:渲染器更新的地方以及display_game()中发生的事情;
我目前正在使用一个使用GLSurfaceView和GLSurfaceRenderer功能的系统
以下是我对教程中代码的改编
public Input(Context context){
super(context);
glSurfaceRenderer = new GLSurfaceRenderer();
checkcollisions = new Collisions();
while (gameisrunning) {
setRenderer(glSurfaceRenderer);
nextGameTick += skipTicks;
sleepTime = nextGameTick - SystemClock.uptimeMillis();
if(sleepTime >= 0) {
Thread.sleep(sleepTime);
}else{
//S*** we're behind
}
}
这在我的GLSurfaceView中调用,虽然我不确定这是否是实现它的正确位置。
答案 0 :(得分:2)
在尝试解决Android游戏开发之前,您需要阅读几本关于Java的教程。然后阅读有关Android开发的一些教程,然后阅读一些更一般的游戏开发教程。 (编程是很多阅读。)
线程在被中断时抛出异常。你必须告诉Java如何处理它。
要直接回答你的问题,这里有一种方法可以睡到特定的时间:
private void waitUntil(long time) {
long sleepTime = time - new Date().getTime();
while (sleepTime >= 0) {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
// Interrupted. sleepTime will be positive, so we'll do it again.
}
sleepTime = time - new Date().getTime();
}
}
在继续游戏开发之前,你应该至少理解这种方法。
答案 1 :(得分:1)
具有讽刺意味的是,Ron Romero的代码不起作用。它有两个问题:while循环和sleeptime变量。
sleepTime变量是根据要睡眠的指定时间(以毫秒为单位)设置的。它花费时间并从当前的毫秒时间减去它。这个问题是当前的毫秒时间是一个巨大的数字(因此是长变量类型),它提供了一个NEGATIVE sleepTime数字。您永远不会使用此代码进入while循环。
第二件事是错误的是while循环检查本身。利用java中的sleep函数,你不需要像这样循环。您所要做的就是将您想要睡眠的sleepTime传递给睡眠功能,并且它可以正常工作。
private void waitUntil(long time) {
try {
Thread.sleep(time);
}
catch (InterruptedException e) {
//This is just here to handle an error without crashing
}
}
答案 2 :(得分:0)