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

Posted

技术标签:

【中文标题】创建游戏循环(睡眠时间帮助)【英文标题】:Creating a game loop (sleep time help) 【发布时间】:2011-09-09 19:21:14 【问题描述】:

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

【问题讨论】:

【参考方案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();
    

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

【讨论】:

【参考方案2】:

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

sleepTime 变量是根据指定的睡眠时间(以毫秒为单位)设置的。它需要时间并从当前毫秒时间中减去它。这样做的问题是当前毫秒时间是一个巨大的数字(因此是 long 变量类型),它提供了一个 NEGATIVE 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
    

【讨论】:

【参考方案3】:

Java 执行compile-time checking of checked exceptions。

【讨论】:

以上是关于创建游戏循环(睡眠时间帮助)的主要内容,如果未能解决你的问题,请参考以下文章

睡眠功能错误 453

HP笔记本电脑启用睡眠模式无法唤醒!

带有睡眠循环的PHP直到循环结束才更新数据库

如何在 C(Linux)中的 while 循环中准确睡眠?

睡眠前按回车功能

子进程似乎在一段时间循环中陷入睡眠