【发布时间】:2013-12-29 15:23:11
【问题描述】:
我正在开发一个简单的 Java 2D 游戏。
我为游戏编写了一个特定的游戏循环。使用这个游戏循环,游戏有时会以中等(我认为是恒定的)速度运行,有时当我启动它时,它会以缓慢(恒定)的速度运行。
我从以下文章中学会了实现这个游戏循环:Here
代码:
(我将其代码更改为 Java。您可以在标题为“FPS 依赖于恒定游戏速度”的文章中找到此循环。
public void run(){
next_game_tick = System.currentTimeMillis();
while(true){
updateGame(); // This is actually a bunch of methods.
repaint();
next_game_tick = next_game_tick + skip_ticks;
sleep_time = next_game_tick - System.currentTimeMillis();
if(sleep_time<0)sleep_time=2;
try {
Thread.sleep(sleep_time);
} catch (InterruptedException e) {}
next_game_tick = System.currentTimeMillis();
}
}
正如我所说,这个循环并不总是以适当的速度运行游戏,所以我查看了上面文章中建议的其他游戏循环实现。
以下实现,仅基于它的描述,似乎最适合我的游戏:
int TICKS_PER_SECOND = 50;
int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
int MAX_FRAMESKIP = 10;
long next_game_tick = System.currentTimeMillis();
int loops;
bool game_is_running = true;
while( game_is_running ) {
loops = 0;
while( System.currentTimeMillis() > next_game_tick && loops < MAX_FRAMESKIP) {
update_game();
next_game_tick += SKIP_TICKS;
loops++;
}
repaint();
}
(我将其代码更改为 Java。您可以在标题为“具有最大 FPS 的恒定游戏速度”下的文章中找到此循环。
我的问题是,我不完全理解它。我阅读了文章中的描述,了解到这个游戏循环可能最适合我的游戏,但并不完全理解它是如何工作的。
如果有人向我解释这个游戏循环,我将不胜感激,这样我会在尝试在我的游戏中实现它之前完全理解它。
(编辑:我了解游戏循环的概念及其工作原理,但不了解此游戏循环及其所做的一切)。
感谢您的帮助
【问题讨论】:
-
对不起,这个网站的新手。忘记接受答案。从现在开始会做:)
-
为什么要等待未来?您没有理由不接受旧答案。
标签: java multithreading game-loop