如何通过finger-LibGdx移动对象以及触摸拖动/滑动

时间:2017-12-01 07:34:29

标签: libgdx

我想为一个物体实现一个触控。当我连续滑动时,不用手指离开屏幕,物体也必须沿着那条路移动。

1.单次触摸时,物体不应移动。

2.如果滑动/拖动一点,物体必须朝那个方向移动。如果滑动/拖动更多,物体应移动更多。

我发现这个游戏在Play商店中具有我想要实现的相同类型的控件。

https://play.google.com/store/apps/details?id=com.bentostudio.ballsvsblocks&hl=en

我实现了这样的基本滑动控制。

我的inputprocessor类中的fling()是这样的;

 public boolean fling(float velocityX, float velocityY, int button) {
    if (Math.abs(velocityX) > Math.abs(velocityY)) {
        if (velocityX > 8) {
            this.isSwipeRight = true;
        } else  if (velocityX < 0) {
            this.isSwipeLeft = true;
        }
    } 
    return false;
}

并在update()中处理滑动,如下所示:

    private void handleSwipe() {
    if (MyInputProcessor.isSwipeLeft) {
        obj.moveLeft();
        System.out.println("u swiped left");
        MyInputProcessor.isSwipeLeft = false;
    } else if (MyInputProcessor.isSwipeRight) {
        obj.moveRight();
        System.out.println("u swiped right");
        MyInputProcessor.isSwipeRight = false;
    }
}

和移动对象的方法:

private float xSpeed=0;
private float leftAccel = 5f;
private float rightAccel = 5f;

public void moveLeft() {
    xSpeed-= leftAccel;
    setPosition(getX()+xSpeed, getY());
}

public void moveRight() {
    xSpeed= rightAccel;
    setPosition(getX()+xSpeed, getY());

}

但是我无法使其正常工作。只有基本的滑动才能正常工作。想一想如何在屏幕上用手指轻扫时能够保持平滑。

touchDragged()是更好的选择吗?

1 个答案:

答案 0 :(得分:0)

Swing用于快速短暂移动。对于更长的连续手指移动,您应该使用平移方法:

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/input/GestureDetector.GestureAdapter.html#pan-float-float-float-float-