我只是想知道一个简短的问题,你究竟为delta做了什么。参数double delta是(正如开发人员所说,逻辑更新的秒数)。如果我希望循环每秒运行20次,我会将它设置为.2或类似的东西吗?我对逻辑更新(以秒为单位)部分感到困惑。
无论如何,如果您想要查看所提供的游戏循环,请查看此处的页面http://entropyinteractive.com/2011/02/game-engine-design-the-game-loop/
public abstract class GameLoop
{
private boolean runFlag = false;
/**
* Begin the game loop
* @param delta time between logic updates (in seconds)
*/
public void run(double delta)
{
runFlag = true;
startup();
// convert the time to seconds
double nextTime = (double)System.nanoTime() / 1000000000.0;
while(runFlag)
{
// convert the time to seconds
double currTime = (double)System.nanoTime() / 1000000000.0;
if(currTime >= nextTime)
{
// assign the time for the next update
nextTime += delta;
update();
draw();
}
else
{
// calculate the time to sleep
int sleepTime = (int)(1000.0 * (nextTime - currTime));
// sanity check
if(sleepTime > 0)
{
// sleep until the next update
try
{
Thread.sleep(sleepTime);
}
catch(InterruptedException e)
{
// do nothing
}
}
}
}
shutdown();
}
public void stop()
{
runFlag = false;
}
public abstract void startup();
public abstract void shutdown();
public abstract void update();
public abstract void draw();
}
答案 0 :(得分:0)
您输入单个逻辑循环应基于的时间(以毫秒为单位)。
如果你想要每秒20次,那么1/20秒是不是0.2而是0.05的数字。
您可以通过编写" 1.0 / 20"更直观地编写它(IMO)。然后你不必来回转换,只需用频率替换20即可。