创建游戏循环(睡眠时间帮助)
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。
【讨论】:
以上是关于创建游戏循环(睡眠时间帮助)的主要内容,如果未能解决你的问题,请参考以下文章