当没有输入时,基于Java2D的游戏引擎会滞后
我正在摆弄我的定制游戏引擎,它使用Java2D API在画布上绘制(活动渲染)
我注意到的是,如果我继续按笔记本电脑键盘上的键或移动鼠标(在帧边界内),一个正方形移动的简单场景会渲染得更平滑。如果我什么都不做,运动就会感觉迟钝
我的游戏引擎使用固定的时间步长渲染,其中每个图形可以发生多个更新
我的框架结构:JFrame有一个子画布,它使用一个线程来执行更新/渲染
操作系统是Linux,它会成为焦点问题吗?FPS计数器在两种情况下报告相同的FPS
我的循环代码如下:
while(active) {
g = (Graphics2D) bs.getDrawGraphics();
now = System.currentTimeMillis();
double delta = now - prev;
while(delta >= 0) {
update(dt);
updateTicks++;
delta -= dt;
}
render(g);
bs.show();
if(System.currentTimeMillis() - fpsTimer > 1000) {
fpsTimer += 1000;
System.out.printf("FPS: %d\n", updateTicks);
updateTicks = 0;
}
prev = now;
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
但我认为这不是问题所在
更新:帧速率略有下降:如果我不向帧提供输入,每秒更新5/7次。。在幕后发生了一些事情
# 1 楼答案
检查输入逻辑处理的线程