首页 文章

LibGDX - 只有可拖动的动作

提问于
浏览
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;;}

代码有点凌乱......

1 回答

  • 0

    如果我理解正确的话,你想要的是铲斗只在你拖动时移动,而现在它所做的就是移动到你点击/录制的任何“x”,即使那个“x”远离铲斗,从而“传送”它 .

    要做到这一点,首先要有一个布尔值,比如“btouched” .

    boolean btouched = false;
    

    然后,您将不得不使用输入处理器(而不是InputPolling) . 如果点击/点击位于存储桶内,则检查触地事件,然后仅当存在时,它将在拖动事件中移动:

    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);
    

相关问题