创建游戏循环(睡眠时间帮助)

时间:2011-09-09 19:21:15

标签: android opengl-es thread-sleep game-loop

我一直在使用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中调用,虽然我不确定这是否是实现它的正确位置。

3 个答案:

答案 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)