我写一个游戏循环,我发现在例如下面的代码在这里。我还研究了进行游戏循环的其他方法,例如本文。但是我无法让这些工作。因此,我保留了第一个链接中的那个。
我想知道的是:
Thread.sleep();
在游戏循环中使用吗?这是我当前的代码:
public void run(){
long lastLoopTime = System.nanoTime();
final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;
long lastFpsTime = 0;
while(true){
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
double delta = updateLength / ((double)OPTIMAL_TIME);
lastFpsTime += updateLength;
if(lastFpsTime >= 1000000000){
lastFpsTime = 0;
}
this.updateGame(delta);
this.repaint();
try{
Room.gameTime = (lastLoopTime - System.nanoTime() + OPTIMAL_TIME) / 1000000;
System.out.println(Room.gameTime);
Thread.sleep(Room.gameTime);
}catch(Exception e){
}
}
最终,您将想要移至LWJGL之类的地方,但让我强调一下,请继续做您现在在这里所做的事情。它将教您基本知识。
做好您的循环。看起来不错,让我提供一些提示:
重新绘制将不会立即渲染屏幕。它告诉RepaintManager准备就绪时进行渲染。立即使用
invalidate
paint代替。paintImmediately
将阻塞执行,直到重新绘制组件为止,以便您可以测量渲染时间。
Thread.sleep
通常会有几毫秒的漂移。您应该使用它来防止循环使用过多的CPU,但是请确保您了解如果睡眠10毫秒,则可能睡眠5毫秒,或者可能睡眠20。
最后:
double delta = updateLength / ((double)OPTIMAL_TIME);
如果updateLength
小于OPTIMAL_TIME,请不要调用更新。换句话说,如果增量小于1,请不要更新。本教程说明了为什么比我能做到的更好。
包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢
本食谱演示了使用组合流来创建游戏循环的一种方式。本食谱旨在突出如何用响应式的方式来重新思考现有问题。在这个示例中,我们将提供整体循环以及自上帧以来的增量时间。与此相结合的是用户输入流,以及当前的游戏状态,我们可以用它来更新我们的对象,并根据每帧的发出来将其渲染到屏幕上。 示例代码 ( StackBlitz ) import { BehaviorSubject, Observable, of, fr
我对我正在写的一个介于两者之间的骰子游戏有一个问题。我之前有另一个问题被回答了,但我仍然有一个问题。(请记住,我对一般编程非常陌生) 甚至-史蒂文!高还是低[hl]?h 模具3:9 *你赢了!* 任何关于我需要改变什么/改变它的任何帮助都将非常感谢!提前谢了。
每个pyplay都有一个游戏循环,看起来像这样: 根据的api: 返回自调用pygame.init()以来的毫秒数。在pyplay被初始化之前,这将永远是0。 但是: 此方法应每帧调用一次。它会计算出有多少。自上次调用以来已过毫秒。 如果您传递可选的framerate参数,函数将延迟以使游戏运行速度低于给定的每秒滴答数。这可以用来帮助限制游戏的运行速度。通过呼叫时钟。每帧勾选(40)一次,程序的运
问题内容: 我正在用Java创建我的第一个游戏。游戏是大富翁。我在如何设计游戏以模拟其基于回合的结构(管理玩家回合)方面感到困惑。我想允许一个人控制和一个或多个AI控制的玩家玩游戏。 我的具体问题是,我不知道是否实施游戏循环,即可以管理玩家和与大富翁游戏直接相关的变量的循环(例如,提示每个玩家轮到他们,增加回合到下一个玩家的回合,或依次让每个玩家掷骰子)。我指的不是“游戏循环”这个词的更底层含义,
所以我为我的课做了一个抽动练习作业。我已经成功地创建了一个简单的Tic Tac Toe程序,但不知何故,检查绘制的方法有时并不正确。如果所有东西都填满了,但没有赢家,那就是平局。但如果除第0行第1列外,其他所有内容都已填满,则即使该框仍为空白,它仍将显示“Draw”。如果你不明白我的意思,就试着把所有的东西都填满,但不是赢,即使最后一个框没有填满,它也会说“平局”。我在代码中做错了什么????驱动