LibGDX - Чувствительность мыши зависит от частоты кадров, когда курсор ловится - PullRequest
0 голосов
/ 23 сентября 2018

Я разрабатываю небольшую игру сверху вниз.Камеру можно перемещать с помощью мыши в пределах определенного диапазона обзора, в то время как курсор скрывается с помощью 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 голосов
/ 29 сентября 2018

Решается путем ручного расчета дельты мыши следующим образом:

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);
...