下面是我试图添加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;
}
}
答案 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) {
这里有几个问题。
传递给screenX
的{{1}}和screenY
参数是屏幕坐标。它们的范围介于0和屏幕的宽度(或高度)之间。 touchDragged
表示期待&#34;速度&#34; (虽然里面的算法似乎并没有这样对待)。
onSwipe
签名中的pointer
是光标的ID号(考虑在触摸板上使用4个手指,&#34;指针&#34;标识哪个手指是哪一个)。您正在使用的是&#39; delta&#39;
您可以将touchDragged
与screenX
进行比较,然后在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;
}
试试