Java游戏更新慢了几秒
Java game slow update for a few seconds
我正在制作一个 game of life 克隆,(你知道,只是为了好玩)我在更新(勾选)方法方面遇到了一点问题。
这是更新和渲染循环:
while (running) {
double nsTick = 1000000000 / amountOfTicks;
long now = System.nanoTime();
deltaRender += (now - lastTime) / nsRender;
deltaTick += (now - lastTime) / nsTick;
lastTime = now;
while (deltaRender >= 1){
render();
frames++;
deltaRender--;
if (tickRunning) {
while(deltaTick >= 1) {
tick();
ticks++;
deltaTick--;
}
}
if (System.currentTimeMillis() - timer > 1000){
timer += 1000;
System.out.println("Ticks: " + ticks);
frames = 0;
ticks = 0;
}
}
}
stop();
如您所见,我将渲染和刻度功能分开了,因为刻度的速率由用户实时控制。
问题是,当游戏开始时,(或未暂停),tick 的更新率不稳定几秒钟(大约 10),然后调整到正确的。可以修复吗?
游戏当前在单线程上运行。
等等,我做了一些不同的事情(也许这就是你的意思)。这是代码:
while(deltaTick >= 1){
deltaTick--;
if(tickRunning){
tick();
ticks++;
}
}
鼠标有点反应迟钝,以前有过,但我想那是以前的事。非常感谢!
问题似乎是当你在暂停游戏时,你仍然在计算你要执行的tick()
s(即deltaTick
继续增加);这些堆积起来的 tick()
会在游戏恢复时立即执行。这里有多种解决方案;一种是在游戏暂停时暂停增加 deltaTick
:
if (tickRunning) {
deltaTick += (now - lastTime) / nsTick;
}
另一种方法是在您恢复或开始游戏时简单地将 deltaTick
设置为 0
。
我正在制作一个 game of life 克隆,(你知道,只是为了好玩)我在更新(勾选)方法方面遇到了一点问题。
这是更新和渲染循环:
while (running) {
double nsTick = 1000000000 / amountOfTicks;
long now = System.nanoTime();
deltaRender += (now - lastTime) / nsRender;
deltaTick += (now - lastTime) / nsTick;
lastTime = now;
while (deltaRender >= 1){
render();
frames++;
deltaRender--;
if (tickRunning) {
while(deltaTick >= 1) {
tick();
ticks++;
deltaTick--;
}
}
if (System.currentTimeMillis() - timer > 1000){
timer += 1000;
System.out.println("Ticks: " + ticks);
frames = 0;
ticks = 0;
}
}
}
stop();
如您所见,我将渲染和刻度功能分开了,因为刻度的速率由用户实时控制。
问题是,当游戏开始时,(或未暂停),tick 的更新率不稳定几秒钟(大约 10),然后调整到正确的。可以修复吗?
游戏当前在单线程上运行。
等等,我做了一些不同的事情(也许这就是你的意思)。这是代码:
while(deltaTick >= 1){
deltaTick--;
if(tickRunning){
tick();
ticks++;
}
}
鼠标有点反应迟钝,以前有过,但我想那是以前的事。非常感谢!
问题似乎是当你在暂停游戏时,你仍然在计算你要执行的tick()
s(即deltaTick
继续增加);这些堆积起来的 tick()
会在游戏恢复时立即执行。这里有多种解决方案;一种是在游戏暂停时暂停增加 deltaTick
:
if (tickRunning) {
deltaTick += (now - lastTime) / nsTick;
}
另一种方法是在您恢复或开始游戏时简单地将 deltaTick
设置为 0
。