Libgdx коснитесь и перетащите в любое место на экране, чтобы переместить спрайт

В настоящее время я использую сенсорную панель scene2d для перемещения спрайта на экране. Что я хочу сделать, так это использовать весь экран в качестве сенсорной панели для перемещения спрайта, но понятия не имею, с чего начать.

  • Если к экрану просто прикоснуться, спрайт не должен двигаться.
  • Спрайт должен двигаться с разной скоростью в зависимости от того, насколько далеко пользователь переместил палец от начальной точки касания.
  • Как только пользователь переместит палец за пределы определенного радиуса, спрайт продолжит двигаться с постоянной скоростью.

По сути, это тачпад без фактического использования сенсорной панели scene2d.


person Steve Fitzsimons    schedule 24.10.2015    source источник
comment
Для этого вам придется реализовать свой собственный InputProcessor. Возможно, здесь мог бы помочь GestureDetector, но в целом в libgdx нет ничего, что делало бы это. Я сомневаюсь, что кто-то будет кодировать это для вас.   -  person noone    schedule 24.10.2015
comment
Не предлагал кому-то кодировать это для меня, я просто ищу предложения о том, с чего начать, или указатели от тех, кто, возможно, пытался это сделать раньше.   -  person Steve Fitzsimons    schedule 24.10.2015


Ответы (1)


В основном вы получили ответ в комментариях.

  1. Использовать обработчик ввода
  2. Сохранить положение касания при касании
  3. Проверьте расстояние между сохраненной позицией касания и текущей позицией касания при перетаскивании касания

Небольшой код в качестве примера:

class MyInputProcessor extends InputAdapter
{
    private Vector2 touchPos    = new Vector2();
    private Vector2 dragPos     = new Vector2();
    private float   radius      = 200f;

    @Override
    public boolean touchDown(
            int screenX,
            int screenY,
            int pointer,
            int button)
    {
        touchPos.set(screenX, Gdx.graphics.getHeight() - screenY);

        return true;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer)
    {
        dragPos.set(screenX, Gdx.graphics.getHeight() - screenY);
        float distance = touchPos.dst(dragPos);

        if (distance <= radius)
        {
            // gives you a 'natural' angle
            float angle =
                    MathUtils.atan2(
                            touchPos.x - dragPos.x, dragPos.y - touchPos.y)
                            * MathUtils.radiansToDegrees + 90;
            if (angle < 0)
                angle += 360;
            // move according to distance and angle
        } else
        {
            // keep moving at constant speed
        }
        return true;
    }
}

И, наконец, вы всегда можете проверить исходный код классов libgdx и посмотреть, как это делается.

person Pinkie Swirl    schedule 25.10.2015