【发布时间】:2013-12-15 22:16:36
【问题描述】:
我正在创建一个回合制游戏,其中战场上的每个图块都是一个单独的按钮。如果玩家决定移动他的角色,移动范围内的图块(按钮)会突出显示(激活)。我还想让路径字符在每次光标进入移动范围内的任何图块时都显示出来——我不确定如何处理事件。我试过简单地将它们发送到路径中的每个图块(按钮):
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 的存在是为了防止路径中以前的图块进入代码的同一部分。如果我是对的,否则他们只会向已经突出显示的图块发送越来越多的事件。 检查 temp.parent.isEmpty() 是否阻止突出显示字符本身:它仅对没有障碍物的图块返回 true。)
虽然 temp.fire(event) 正确突出显示路径中的每个图块,但它不会在完成后取消事件。我似乎无法找到一种方法来取消侦听器的所有事件和“解决方案”,例如在侦听器之外创建一个 InputEvent 变量,为每个临时图块触发()它并在需要时取消它 - 结果是错误的(或者我的代码很糟糕;不幸的是,我还是个初学者)。
我可以暂时更改路径中按钮的样式:它将在常规“向上”图像下包含翻转图像 - 所以基本上它看起来像翻转了......而实际上没有翻转或处理任何事件全部。但话又说回来,如果知道如何正确地做到这一点,那就太好了。
所以,我的问题是:有没有一种方法可以轻松地将事件发送到其他按钮并在需要时取消它们?或者我是否坚持使用“肮脏”(?)解决方案,例如每次更改 ButtonStyle?
【问题讨论】: