0

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

在标记为“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 中被调用,尽管我不确定这是否是实现它的正确位置。

4

3 回答 3

1

看起来你需要先阅读一些关于 Java 的教程,然后才能尝试处理 Android 游戏开发。然后阅读一些关于 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();
    }
}

在继续游戏开发之前,您至少应该了解这种方法。

于 2011-09-09T20:17:49.833 回答
1

具有讽刺意味的是,Ron Romero 的代码不起作用。它有两个问题:while 循环和 sleeptime 变量。

sleepTime 变量是根据指定的睡眠时间(以毫秒为单位)设置的。它需要时间并从当前毫秒时间中减去它。这样做的问题是当前毫秒时间是一个巨大的数字(因此是 long 变量类型),它提供了一个 NEGATIVE sleepTime 数字。您永远不会使用此代码进入 while 循环。

第二个错误是 while 循环检查本身。利用java中的sleep函数,你不需要做这样的循环。您所要做的就是将您想要睡眠的睡眠时间(以毫秒为单位)传递给睡眠功能,它会正常工作。

private void waitUntil(long time) {
    try {
        Thread.sleep(time);
    } 
    catch (InterruptedException e) {
    //This is just here to handle an error without crashing
    }
}
于 2015-02-22T09:38:22.857 回答
0

Java 执行检查异常的编译时检查

于 2011-09-09T20:00:32.323 回答