gpt4 book ai didi

java - libGDX 鼠标悬停在 UI 元素上会触发来自底层 Actor 的相同事件

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

我正在制作一个简单的 RTS 游戏。我为 map 和 UI 创建了单独的阶段,并使用 scene2D Table 类作为侧面板。问题是,当我将鼠标悬停在侧面板上时,如果此时面板下有一个 Actor (建筑物),它会触发其鼠标悬停事件。点击事件工作正常。

这是我的构建类输入监听器:

    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);
}

不确定问题出在哪里,因为点击事件工作正常;

最佳答案

一个快速的解决方案是让您的 Building 类检查鼠标是否也在 SidePanel 上。例如,您可以将 Building 监听器的 enter 方法更改为如下所示:

if (mouseIsOverSidePanel)
((Building)event.getTarget()).hover = true;

您的 SidePanel 监听器的 enter 方法可以是这样的:

mouseIsOverSidePanel = true;

SidePanel 中的 leave 方法可以是:

mouseIsOverSidePanel = false;

这主要是伪代码,因此如果不声明变量(显然)它就无法工作,但它应该让您了解如何解决问题的基本概念。

关于java - libGDX 鼠标悬停在 UI 元素上会触发来自底层 Actor 的相同事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847103/

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