gpt4 book ai didi

java - 在处理 libGDX 中的按钮时如何发送(和取消)输入事件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:38 24 4
gpt4 key购买 nike

我正在创建一个回合制游戏,其中战场上的每个板 block 都是一个单独的按钮。如果玩家决定移动他的角色,则移动范围内的方 block (按钮)会突出显示(激活)。我还想让路径字符在每次光标进入移动范围内的任何图 block 时显示 - 我不确定如何处理事件。我试过简单地将它们发送到路径中的每个图 block (按钮):

final int X=i,Y=j;
grid[i][j].addListener(new ClickListener(){
@Override
public void enter(InputEvent event,float x,float y,int pointer,Actor fromActor)
{
if(isMovementActivated&&!grid[X][Y].isDisabled()&&!isParentActivated)
{
isParentActivated=true;
Tile temp = grid[X][Y];
while(temp.parent!=null&&temp.parent.isEmpty())
{
temp=temp.parent;
temp.fire(event);
}
isParentActivated=false;
}
}
}
});

(isParentActivated 用于防止路径中之前的图 block 进入代码的同一部分。如果我是对的,否则他们只会向已经突出显示的图 block 发送越来越多的事件。检查 temp.parent.isEmpty() 是否阻止突出显示角色本身:它仅对没有障碍物的图 block 返回 true。)

虽然 temp.fire(event) 会正确突出显示路径中的每个图 block ,但它不会在完成后取消事件。我似乎无法找到一种方法来取消监听器的所有事件和“解决方案”,例如在监听器外部创建一个 InputEvent 变量,为每个临时图 block 触发()它并在需要时取消它 - 结果是错误的(或我的代码很糟糕;不幸的是,我还是个初学者。

我可以临时更改路径中按钮的样式:它将在常规“向上”图像下包含滚动图像 - 所以基本上它看起来像滚动......实际上没有被滚动或处理任何事件全部。但话又说回来,如果知道如何正确地做到这一点,那就太好了。

所以,我的问题是:有没有一种方法可以轻松地将事件发送到其他按钮并在需要时取消它们?还是我坚持使用“肮脏的”(?)解决方案,例如每次都更改 ButtonStyle?

最佳答案

  1. 您应该使用 ImageButtonStyle 的强大功能来正确突出显示按钮而不是切换样式。定义这样的 style :

    "some-button": {
    "imageUp": "default state of button",
    "imageDown": "button is clicked",
    "imageOver": "button with mouse over",
    "imageChecked": "highlighted state (like imageUp but checked)",
    "imageCheckedOver": "highlighted state with mouse over"
    }

    然后调用按钮的 setChecked(boolean checked) 方法使其高亮显示

  2. 以这种方式使用事件不是个好主意。您不应该手动发送事件,您可以改为调用一些方法。

    ...
    {
    ClickListener clickListener = new ClickListener(){
    @Override
    public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor)
    {
    highlightButtons(fromActor);
    }
    }

    grid[i][j].addListener(clickListener);
    }
    ...

    public void highlightButtons(Actor actor)
    {
    // iterate through the buttons and call setChecked of each button should be highlighted
    // to detect right buttons you could use ArrayMap<ImageButton, YourClass>
    }

关于java - 在处理 libGDX 中的按钮时如何发送(和取消)输入事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600563/

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