Java 在处理libGDX中的按钮时,如何发送(和取消)输入事件?
我正在创建一个基于回合的游戏,其中战场上的每个互动程序都是一个单独的按钮。如果玩家决定移动他的角色,移动范围内的平铺(按钮)将高亮显示(激活)。我还想让路径字符在光标进入移动范围内的任何平铺时都显示出来——我不知道如何处理事件。我尝试将它们发送到路径中的每个磁贴(按钮):Java 在处理libGDX中的按钮时,如何发送(和取消)输入事件?,java,libgdx,Java,Libgdx,我正在创建一个基于回合的游戏,其中战场上的每个互动程序都是一个单独的按钮。如果玩家决定移动他的角色,移动范围内的平铺(按钮)将高亮显示(激活)。我还想让路径字符在光标进入移动范围内的任何平铺时都显示出来——我不知道如何处理事件。我尝试将它们发送到路径中的每个磁贴(按钮): final int X=i,Y=j; grid[i][j].addListener(new ClickListener(){ @Override public void enter(InputEvent eve
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(事件)会正确高亮显示路径中的每个磁贴,但它不会在事件完成后取消该事件。我似乎找不到一种方法来取消监听器的所有事件和“解决方案”,比如在监听器之外创建一个InputEvent变量,为每个临时磁贴触发()并在需要时取消它——结果是错误的(或者我的代码很糟糕;不幸的是,我还是一个初学者)
我可以临时更改路径中按钮的样式:它将包含常规“向上”图像下的翻滚图像-因此基本上看起来像翻滚。。。没有实际的滚动或处理任何事件。但话说回来,如果知道如何正确地做,那就太好了
所以,我的问题是:有没有一种方法可以轻松地将事件发送到其他按钮,并在需要时取消它们?还是我总是被“肮脏的”(?)解决方案所困扰,比如每次都要改变按钮样式
ImageButtonStyle
的功能正确高亮显示按钮,而不是切换样式。定义如下:
并调用按钮的setChecked(boolean checked)
方法使其高亮显示...
{
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>
}
。。。
{
ClickListener ClickListener=新建ClickListener(){
@凌驾
public void enter(InputEvent事件、浮点x、浮点y、int指针、Actor fromActor)
{
highlightButtons(fromActor);
}
}
网格[i][j].addListener(单击Listener);
}
...
公共空白高亮按钮(演员)
{
//遍历按钮并突出显示每个按钮的call setChecked
//要检测正确的按钮,可以使用ArrayMap
}
谢谢,我一直在寻找一种像setChecked(boolean checked)这样的方法——虽然我很确定我知道它,但似乎我当时不知道如何正确管理按钮的样式。我解决了这个问题,每次我想突出显示一个按钮时都会改变样式,但是你的建议要好得多,我肯定会尝试一下。谢谢。
...
{
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>
}