LibGDX TextButton - 只要按住它,就会重复调用任何事件?

LibGDX TextButton - Any event getting called repeatedly as long as it's held down?

我正在制作一款游戏,您可以使用两个按钮来旋转玩家,一个向左,另一个向右。我在 LibGDX 中使用 TextButton。我的问题是 ClickListener 中的方法 clicked(InputEvent event, float x, float y) 仅在单击后才被调用。我希望只要按下一个事件就可以重复调用该事件。这是我的代码:

TextButton btnLeft = new TextButton("<", styleButton);
TextButton btnRight = new TextButton(">", styleButton);

btnLeft.setSize(100, 100);
btnRight.setSize(100, 100);

btnLeft.setPosition(25, 25);
btnRight.setPosition(200, 25);

btnLeft.addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        player.rotate(-1);
        System.out.println("Left");
    }
});
btnRight.addListener(new ClickListener() {
    Override
    public void clicked(InputEvent event, float x, float y) {
        player.rotate(1);
        System.out.println("Right");
    }
});

stage.addActor(btnLeft);
stage.addActor(btnRight);

侦听器不是执行连续操作的好地方,因为根据定义它是异步机制。执行此类操作的地方是 Screen 的 render() 方法或 actor 的 act() 方法。

虽然你可以使用监听器以这种方式检查actor的状态(是否按下):

//Global instance
ClickListener listenerLeft;

//show() method
...
listenerLeft= new ClickListener();  
btnLeft.addListener(listenerLeft);
...

//render() method
...
if(listenerLeft.isPressed())
    //perform turning left
...

第二个选项是实现ClickListenertouchUptouchDown方法来改变一些标志然后检查它在 render 但它不会做任何新的事情。


值得注意的是,ClickListener 和 DragListener 都具有 touchDragged 方法,该方法与您想要的有关,但仅在 如果 mouse/finger 是触摸演员时移动

listener = new DragListener(){
        @Override
        public void touchDragged(InputEvent event, float x, float y, int pointer)
        {
            System.out.println("Left");
        }
    };

保持触摸不是动作 - 没有动作 = 没有什么可听的