我一直在使用这个教程来创建一个游戏循环。
在标记为"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中调用的,尽管我不确定这是否是实现这个的正确位置
看起来你需要在尝试处理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();
}
}
在继续游戏开发之前,你至少应该理解这个方法。
讽刺的是,Ron Romero的代码不起作用。这里有两个问题:while循环和睡眠时间变量。
sleepTime变量是基于指定的睡眠时间(以毫秒为单位)设置的。它取时间并从当前毫秒时间中减去它。这样做的问题是,当前的毫秒时间是一个巨大的数字(因此是长变量类型),它提供了一个负的睡眠时间数字。你永远不会用这段代码进入while循环。
第二个错误是while循环检查本身。使用java中的sleep函数,您不需要执行这样的循环。你所要做的就是把你想要睡眠的时间(以毫秒为单位)传递给sleep函数,它就会工作得很好。
private void waitUntil(long time) {
try {
Thread.sleep(time);
}
catch (InterruptedException e) {
//This is just here to handle an error without crashing
}
}
Java执行检查异常的编译时检查。