Libgdx 触摸并拖动屏幕上的任意位置以移动精灵

Libgdx touch and drag anywhere onscreen to move sprite

目前我正在使用 scene2d 触摸板在屏幕上移动精灵。我想做的是将整个屏幕用作触摸板来移动精灵,但不知道从哪里开始。

基本上它是一个触摸板,没有实际使用 scene2d 触摸板

基本上你在评论中得到了答案。

  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 类 的来源,看看它是如何完成的。