Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的java游戏在不同的计算机上以慢动作运行_Java_Loops - Fatal编程技术网

我的java游戏在不同的计算机上以慢动作运行

我的java游戏在不同的计算机上以慢动作运行,java,loops,Java,Loops,我正在开发一个游戏,只是想在另一台电脑上测试它,看看分辨率是否正常,但我注意到一个大问题,游戏运行缓慢,因为某种原因。。。不是慢动作,而是慢动作。。 我的游戏循环是暂时的: while(gameisRunnin){ doStuff(); Thread.sleep(1000/60); 但是在测试之后,我试着检查执行doStuff()需要多少时间代码,我对其进行了如下测试: while(gameisRunnin){ long startT = System.curre

我正在开发一个游戏,只是想在另一台电脑上测试它,看看分辨率是否正常,但我注意到一个大问题,游戏运行缓慢,因为某种原因。。。不是慢动作,而是慢动作。。 我的游戏循环是暂时的:

while(gameisRunnin){
     doStuff();
     Thread.sleep(1000/60);
但是在测试之后,我试着检查执行
doStuff()需要多少时间代码,我对其进行了如下测试:

while(gameisRunnin){
     long startT = System.currentTimeMillis();
     doStuff();
     long stopT = System.currentTimeMillis();
     System.out.println(stopT-startT);
     Thread.sleep(1000/60);
它给我的结果是0,在两台电脑上,(在我正在开发的一台电脑上,它以完美的速度运行,在pc上,它以慢动作运行.)。。 我还用nano time进行了测试,它在两台计算机上都给出了50000-80000的结果(几乎相同)。 说真的,怎么了?超人能救我吗

更新: 好的,当我在另一台电脑上运行游戏时,不是全屏,它运行得很好,但是当它全屏运行时,它运行得很慢 更新: 看起来我是这里的超级英雄,我已经将displaymode和刷新率设置为unknown,我想这就是全部问题所在…

阅读本文:


另外,作为旁注,请使用System.nanoTime(),因为System.getTimeMillis()没有那么准确。

您必须使用通常称为“增量时间”的东西。基本上,这意味着,您要测量完成游戏循环的一次迭代所需的时间,然后对所有动作使用此数字

这是因为在不同的计算机上FPS的计数不同。你不是为了固定的像素数而移动对象,而是定义速度并动态计算移动的实际大小

简短示例:

public void gameLoop() {
    long initialTime = System.nanoTime();

    game.redraw();
    game.update(System.nanoTime() - initialTime);
}

// inside the class Game
public void update(long deltaTime) {
    someObject.moveToRight(deltaTime * speed);
}

答案是显示器不支持游戏的刷新率,将刷新率从60更改为
DisplayMode。刷新率\u UNKNOWN
修复了慢速运动问题。

旁注:使用
System.nanoTime()
而不是
System.currentTimeMillis()
测量时差噢,过去的好日子…如果你有25MHz 286,你必须禁用“Turbo”才能正常播放Kings Quest I…测试线程睡眠时间(1000/60);
使用快速计算机=使用doStuff()的时间更短,使用慢速计算机=使用doStuff()的时间更长。您可以在doStuff()中为迭代次数添加时间/fps依赖性,这样,如果延迟越大,迭代次数就越多(可能会导致自授权延迟)。因此,如果在最后一步后等待50毫秒,则迭代5次。如果在最后一步后等待20毫秒,则迭代2次。但是,如果使用适当的时间-->迭代次数转换,则每个步骤的时间有可能收敛。不要将睡眠部分作为常量,在开始主要工作之前进行一些基准测试,并确定wa这部分取决于基准测试结果,然后忽略这篇文章,使用一个
ScheduledExecutorService
。但问题是,我正要开始使用delta time制作高级FPS系统,但首先我想测试速度,两台计算机都给了我相同的纳米时间(或多或少)但是由于某些原因,游戏在一台电脑上运行时是慢动作,而在另一台电脑上运行时是正常动作。我建议先尝试实现delta时间(用一个移动的矩形进行最简单的实验就足够了)。您将看到它的行为是否相同。此问题可能是由很多事情引起的,不幸的是,如果不阅读整个代码和/或不知道所有后果,我将无法帮助您。