当没有输入时,基于Java2D的游戏引擎滞后

时间:2016-05-26 17:07:44

标签: java canvas game-engine java-2d

我正在搞乱自定义构建的游戏引擎,该引擎使用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次更新。幕后发生了一些事情......

1 个答案:

答案 0 :(得分:0)

检查您的输入逻辑处理是哪个线程。