libGDX使touchDown循环直到touchUp

3

我正在使用libGDX制作游戏。

我想要实现游戏控制,但是在touchDown方法上遇到了问题。 touchDown方法只运行一次。 我想循环执行touchDown直到调用touchUp。 有人能帮我吗?

class  onPlayerGoLeftListener extends InputListener {

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        //start runnable   (move player)     

        return true;
    }

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
        //stop runnable
    }

}

谢谢

p.s. 我不喜欢使用主要更新方法来完成这个任务

2个回答

9

在事件回调或渲染回调中无法“循环”,否则整个系统将停止。实现你想要的效果的一种方法是,在touchDown方法中设置标志,在touchUp方法中清除标志,然后在render中使用标志来保护“循环”的主体。

boolean touchActive = false;

public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
   //start runnable   (move player)     
   touchActive = true;
   return true;
}

public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
   //stop runnable
   touchActive = false;
}


public void render(float delta) {
   ...
   if (touchActive) {
      // Do one iteration of your "while" loop
   }
   ...
}

“enableRepeatableEvent(true)”这个方法也是一个解决方案吗?还是只适用于键盘事件?我正在使用您上面写的方法,但我想知道另一种解决方案是否可行。 - Robert P

1
在render()或绘制线程中,您可以直接使用。
 if (Gdx.input.isTouched()){
  //some thing move()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接