在LIBGDX中使用事件驱动的输入检测来移动actor

时间:2015-04-12 17:03:25

标签: java libgdx

我在移动我的演员时遇到事件驱动的输入检测问题。

我目前正在使用GestureDetector并检测Tap(这一切都有效)`

@Override
 public void show() {
    GestureDetector GD = new GestureDetector(this);
    InputMultiplexer inputMulti = new InputMultiplexer();
    inputMulti.addProcessor(hudStage);
    inputMulti.addProcessor(GD); 
    Gdx.input.setInputProcessor(inputMulti);
}

@Override
public boolean tap(float x, float y, int count, int button) {
    System.out.println("YOU HAVE PERFORMED A TAP"); 
    this.playStage.act(Gdx.graphics.getDeltaTime());

    return true;
}`

目前点按即可打印出你已经执行了点击的内容(见上文),它还调用了部分工作的舞台动作方法(它使演员移动一帧运动而不是整个距离)。我已经使用轮询来让演员执行我想要的方式,因为我可以在渲染循环中调用该方法,然后允许它继续逐帧更新移动。使用事件驱动我目前没有找到逐帧更新它,所以相反,它在一帧中尽可能多地进行更新然后停止。

我环顾四周,看了很多线程,但似乎libgdx不是线程安全的。回到民意调查我的主要问题是我需要将我的阶段分开,我不完全确定如何做到这一点。

对于民意调查,我没有使用某个操作,但使用了此代码

if(!fStarted){            
        if (Gdx.input.isTouched()) {
            fStarted = true;
            touchX = Gdx.input.getX();
            spriteX = cSprite.x;            
        }
        }
        final float dv = delta * speed;
        if (Math.abs(touchX - spriteX) > 45) {
            playStage.getBatch().draw(flameImage, spriteX, fSprite.y);
            if (spriteX < touchX) {
                spriteX += dv;
                //fSprite.x = spriteX;
            }
            if (spriteX > touchX) {
                spriteX -= dv;
                //fSprite.x = spriteX;
            }
        }
        else{
            spriteX = 9000;
            fStarted=false;
        }

fStarted只是确定演员当前是否正在移动到某个位置。由于演员是一个射弹,我不想在一个点上(你知道的游戏选择)。

如果还有其他信息,您只需要发表评论,我就会提供。

净度 如何使用事件驱动的手势检测将actor移动到用户点击的位置?

0 个答案:

没有答案