gpt4 book ai didi

java - LibGDX TextButton - 只要按住它,任何事件都会被重复调用吗?

转载 作者:行者123 更新时间:2023-12-01 10:23:05 27 4
gpt4 key购买 nike

我正在制作一款游戏,其中有两个按钮可以旋转玩家,一个向左,另一个向右。我在 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 方法,该方法与您想要的有关,但仅在触摸 actor 时鼠标/手指移动

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

保持触摸不是一个 Action - 没有 Action =没有什么可听的

关于java - LibGDX TextButton - 只要按住它,任何事件都会被重复调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com