我正在搞乱自定义构建的游戏引擎,该引擎使用Java2D API在Canvas上绘制(Active rendering)。
我注意到的事情是,如果我主动按住笔记本电脑键盘上的按键或移动鼠标(在画面边界内),那么一个方形移动的简单场景会变得更加流畅。如果我什么都不做,那么运动会感觉迟钝。
我的游戏引擎使用固定的时间步长渲染,每次绘制都可以进行多次更新。
我的框架结构:JFrame有一个子Canvas,它使用一个线程来执行更新/渲染。
操作系统是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();
}
}
我认为这不是问题所在。
更新:有轻微的fps下降:如果我不为帧提供输入,则每秒5/7次更新。幕后发生了一些事情......
答案 0 :(得分:0)
检查您的输入逻辑处理是哪个线程。