libgdx上touchDragged的问题

时间:2014-05-14 19:30:09

标签: java libgdx

下面是我试图添加touchDragged的代码,我试图使用drag方法通过touchDragged功能使对象左右移动。

问题是,当我在屏幕右侧滑动时,无论是向左还是向右滑动,对象都只向右移动。当我向左或向右滑动时,物体向左移动。

有什么我想念的吗?

输入类及下面的对象类。

也是与此相同的倾斜动作或者是不同的东西? 如果可以解释的话会很好。

输入类为

public class Input implements InputProcessor
{
    private Kame myKame;

    public Input(Kame kame) {

        myKame = kame;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        myKame.onClick();
        return true; // Return true to say we handled the touch.
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer, int button) {
        myKame.onClick();
        return false;
    }

    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        myKame.onSwipe(screenX, screenY, pointer);
        return true;
    }

    @Override
    public boolean mouseMoved(int screenX, int screenY) {
        return false;
    }

    @Override
    public boolean scrolled(int amount) {
        return false;
    }
}

和Kame类如下:

    public class Kame 
    {
  private Vector2 position;
  private Vector2 velocity;
  private Vector2 acceleration;

private int width;
private int height;
public float x;

public Kame(float x, float y, int width, int height) {
    this.width = width;
    this.height = height;
    position = new Vector2(x, y);
    velocity = new Vector2(0, 0);
    acceleration = new Vector2(0, 460);
}

public void update(float delta) {

}

public boolean onSwipe(int velocityX, int velocityY, int delta) {

    position.add(position.cpy().scl(delta));

    // if (Math.abs(velocityX) < Math.abs(velocityY)) {
        if (velocityX > 136) {
            position.x += 3;//x cordinate
            velocity.y += 10;
        } else if (velocityX < 136) {
            position.x -= 3;
            velocity.y += 10;
        } else {
            // Do nothing.
        }
    // } else {
        // Ignore the input, because we don't care about up/down swipes.
    // }
    return true;
}

public float getX() {
    return position.x;
}

public float getY() {
    return position.y;
}

public float getWidth() {
    return width;
}

public float getHeight() {
    return height;
}
}

2 个答案:

答案 0 :(得分:2)

此次致电onSwipe

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
    myKame.onSwipe(screenX, screenY, pointer);
    return true;
}

似乎与此onSwipe的实现不匹配:

public boolean onSwipe(int velocityX, int velocityY, int delta) {

这里有几个问题。

  1. 传递给screenX的{​​{1}}和screenY参数是屏幕坐标。它们的范围介于0和屏幕的宽度(或高度)之间。 touchDragged表示期待&#34;速度&#34; (虽然里面的算法似乎并没有这样对待)。

  2. onSwipe签名中的pointer是光标的ID号(考虑在触摸板上使用4个手指,&#34;指针&#34;标识哪个手指是哪一个)。您正在使用的是&#39; delta&#39;

  3. 您可以将touchDraggedscreenX进行比较,然后在pos.x中添加或减去3,具体取决于pos.x是否小于或大于screenX }。

    计算实际速度需要跟踪位置中的更改(这意味着跟踪先前的触摸位置),然后按帧速率(pos.x传递给它来缩放它delta)。

答案 1 :(得分:0)

更改代码
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
myKame.onSwipe(screenX, screenY, pointer);
return true;
}

@Override
public boolean touchDragged(int screenX, int screenY, int button) {
myKame.onSwipe(screenX, screenY, pointer);
return true;
}

试试