0

: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;;}

代码有点乱。。。

4

1 回答 1

0

如果我理解正确,你想要的是桶只在你拖动它时移动,现在它所做的是移动到你点击/录音的任何“x”,即使那个“x”离桶很远,因此“传送”它。

为此,首先要有一个布尔值,可以说“btouched”。

boolean btouched = false;

然后您将不得不使用输入处理器(而不是 InputPolling)。如果单击/轻击在桶内,则检查 touchdown 事件,那么只有在它是时,它才会在拖动事件中移动:

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);
于 2013-11-02T11:26:46.407 回答