Как реализовать перетаскивание камеры в LibGdx, используя Gdx.input.getDeltaX () - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь реализовать движение камеры, в основном перетаскивая игровой мир пальцем (как перетаскивание карт Google).

Это алгоритм, который я придумал:

@Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        prevPoint.set(screenX - Gdx.input.getDeltaX(), screenY - Gdx.input.getDeltaY(), 0); //calculate previous finger position (in screen coords)
        point.set(screenX,  screenY, 0); //set the new coords
        camera.unproject(prevPoint); 
        camera.unproject(point);//unprojecting from screen into word coords
        point.sub(prevPoint); //calculate the difference between the two points
        camera.translate(-point.x, -point.y, 0); //moving camera by the difference
        return true;
    }

Я в основном перевожу камеру по разнице между двумя точками мира, поэтому камера перемещается на то же расстояние, что и мой палец (но в противоположном направлении).

К сожалению, это создает очень неровное движение с плохой точностью.

Я попробовал небольшой трюк и предоставил свои собственные значения дельты вместо значений Gdx.input. Я обнаружил, что мой алгоритм работает намного лучше, когда я не использую Gdx.input.getDeltaX () и Gdx.input.getDeltaY () .

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        prevPoint.set(screenX, screenY, 0); //set previous point on touch down event
        return true;
    }


    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        point.set(screenX,  screenY, 0); //set coordinates
        camera.unproject(prevPoint); //unproject coords
        camera.unproject(point);
        point.sub(prevPoint); //calc difference
        camera.translate(-point.x, -point.y, 0); //translate camera
        prevPoint.set(screenX, screenY, 0); //store screen coords to be used in next event as previous coords
        return true;
    }

По какой-то причине эти методы дают мои разные значения, а не мои собственные значения дельты.

Что я делаю не так? Как правильно использовать эти странные значения?

...