LibGDX TextButton - 任何事件都被反复调用,只要它被按下了?

时间:2016-02-17 21:21:36

标签: java libgdx scene2d

我正在制作一个游戏,你有两个按钮来旋转玩家,一个到左边,另一个到右边。我在TextButton中使用了LibGDX。我的问题是clicked(InputEvent event, float x, float y)中的方法ClickListener只有在点击后才会被调用。我想要一个事件被重复调用,只要它被按下。这是我的代码:

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

1 个答案:

答案 0 :(得分:1)

监听器不是执行连续操作的好地方,因为它是定义异步机制。执行此类操作的地方是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
...

第二个选项是实施ClickListener touchUp touchDown 方法来更改某些标志,然后在渲染中进行检查但它不会做任何新的事情。

值得注意的是,ClickListener和DragListener都有 touchDragged 方法,这是你想要的东西,但只有如果鼠标/手指在触摸演员时移动 < / p>

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

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