我正在制作一个游戏,你有两个按钮来旋转玩家,一个到左边,另一个到右边。我在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);
答案 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");
}
};
保持触摸不是动作 - 没有动作=没什么可听的