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
...
第二个选项是实现ClickListener的touchUp和touchDown方法来改变一些标志然后检查它在 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");
}
};
保持触摸不是动作 - 没有动作 = 没有什么可听的
我正在制作一款游戏,您可以使用两个按钮来旋转玩家,一个向左,另一个向右。我在 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
...
第二个选项是实现ClickListener的touchUp和touchDown方法来改变一些标志然后检查它在 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");
}
};
保持触摸不是动作 - 没有动作 = 没有什么可听的