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



我一直在使用这个教程来创建一个游戏循环。

在标记为"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执行检查异常的编译时检查。

相关内容

最新更新