:D我目前正在为Android创建我的第一个LibGDX游戏。而且我遇到了一个关于我的小播放器(这是一个桶;))的移动问题。我想使存储桶(播放器)只能在 x 轴上拖动,而不能单击以更改位置。y 轴不会成为问题,因为存储桶只能更改 x 轴上的位置。所以我基本上想让桶只能拖动。对不起我的写作,英语不是我的母语。
这是我的代码片段,其中移动操作:
if (Gdx.input.isTouched()){
Vector3 touchPos = new Vector3();
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
//Check the values
float touchPosX = Gdx.input.getX();
float touchPosY = Gdx.input.getY();
String touchXString = Float.toString(touchPosX);
String touchYString = Float.toString(touchPosY);
Gdx.app.log("Movement - X", touchXString);
//Gdx.app.log("Movement - Y", touchYString);
Gdx.app.log("Movement - BucketX", bucketXString);
//Gdx.app.log("Movement - BucketY", bucketYString)
camera.unproject(touchPos);
bucket.x = touchPos.x - 64 / 2;;}
代码有点乱...
如果我理解正确,你想要的是桶只在你拖动它时移动,现在它所做的是移动到你点击/录制的任何"x",即使那个"x"远离桶,从而"传送"它。
为此,首先有一个布尔值,让我们说,"btouched"。
boolean btouched = false;
然后,您必须使用输入处理器(而不是输入轮询)。 要检查触地事件,如果点击/点击在存储桶内,则只有当它是时,它才会在拖动事件中移动:
MyInputProcessor inputProcessor;
public class MyInputProcessor implements InputProcessor{
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
camera.unproject(touchPos.set(Gdx.input.getX(pointer), Gdx.input.getY(pointer), 0));
if(bucket.contains(touchPos)){
btouched = true;
}else{
btouched = false;
}
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer){
camera.unproject(touchPos.set(Gdx.input.getX(pointer), Gdx.input.getY(pointer), 0));
if(btouched){
bucket.x = touchPos.x - 64 / 2;
}
return false;
}
...
}
不要忘记设置输入处理器:
inputProcessor = new MyInputProcessor();
Gdx.input.setInputProcessor(inputProcessor);