LibGDX-捕获光标时,鼠标灵敏度受帧率的影响

时间:2018-09-23 15:34:59

标签: java libgdx 2d

我正在开发一个小型的自顶向下视图游戏。可以通过鼠标在某个视图范围内移动相机,而使用Gdx.input.setCursorCatched(true)隐藏光标,并在屏幕中间绘制一个人造的光标。这是处理相机移动的方式:

    Vector2 deltaMouse = new Vector2(Gdx.input.getDeltaX() * mouseSensitivity, 
            -Gdx.input.getDeltaY() * mouseSensitivity);
    relativeCameraPosition.add(deltaMouse);
    relativeCameraPosition.limit(viewRange); 
    cameraPosition = playerPosition.cpy().add(relativeCameraPosition);

但是,我遇到了一个问题:游戏通常以超过1000 FPS的速度运行,但是在调用Gdx.graphics.setVSync(true)并将FPS设置为60时,鼠标的灵敏度急剧下降,而相机的运动速度却慢了3倍。

我已经对其进行了一点检查,发现此问题与捕获的光标有关。如果我注释掉Gdx.input.setCursorCatched(true),问题就解决了,相机的响应速度不再受帧速率的影响。但是,显然,这样一来,现在第二个光标漂浮在整个屏幕上,并努力超越其边界。

1 个答案:

答案 0 :(得分:0)

通过手动计算鼠标增量来解决,如下所示:

float mouseDeltaX = previousMousePosition.x - Gdx.input.getX();
float mouseDeltaY = previousMousePosition.y - Gdx.input.getY();
previousMousePosition.set(Gdx.input.getX(), Gdx.input.getY());
Vector2 deltaMouse = new Vector2(-mouseDeltaX * mouseSensitivity, 
        mouseDeltaY * mouseSensitivity);
relativeCameraPosition.add(deltaMouse);
relativeCameraPosition.limit(viewRange); 
cameraPosition = playerPosition.cpy().add(relativeCameraPosition);