我正在制作一个简单的RTS游戏。我为地图和UI创建了单独的阶段,并为侧面板使用了scene2D Table类。问题是,当我悬停我的侧面板时,如果此刻面板下有一个演员(建筑物),它会触发其鼠标悬停事件。点击事件正常工作。
这是我的构建类输入监听器:
public class Building extends Actor {
addListener(new InputListener(){
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("Click");
return true;
}
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor){
((Building)event.getTarget()).hover = true;
}
这是我的小组类听众
public class SidePanel extends Table {
panelBg = new Image(skin,"side-panel");
addListener(new InputListener(){
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
System.out.println("Click");
return true;
}
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor){
System.out.println("Enter");
}
});
addActor(panelBg);
}
}
然后将侧面板添加到UI类阶段:
public class UI {
public UI(){
stage = new Stage();
sidePanel = new SidePanel();
stage.addActor(sidePanel);
Gdx.input.setInputProcessor(stage);
}
最后我将UI添加到主类:
@Override
public void create () {
ui = new UI();
CP =new InputMultiplexer();
CP.addProcessor(ui.stage);
CP.addProcessor(gameStage);
Gdx.input.setInputProcessor(CP);
}
不确定问题出在哪里,因为点击事件正常;
答案 0 :(得分:0)
一个快速的解决方案是让您的Building类检查鼠标是否也在SidePanel上。例如,您可以将构建侦听器的enter
方法更改为以下内容:
if (mouseIsOverSidePanel)
((Building)event.getTarget()).hover = true;
您的SidePanel听众的enter
方法可能是这样的:
mouseIsOverSidePanel = true;
您的SidePanel中的leave
方法可以是:
mouseIsOverSidePanel = false;
这主要是伪代码,因此它不会在没有声明变量的情况下工作(显然),但它应该为您提供如何解决问题的基本知识。