1

シンプルな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);
    }

クリックイベントが正常に機能するため、問題がどこにあるのかわかりません。

4

1 に答える 1

1

簡単な解決策の 1 つは、Building クラスに、マウスが SidePanel にもあるかどうかをチェックさせることです。たとえば、Building リスナーのenterメソッドを次のように変更できます。

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

SidePanel リスナーのenterメソッドは次のようになります。

mouseIsOverSidePanel = true;

また、leaveSidePanel のメソッドは次のようになります。

mouseIsOverSidePanel = false;

これはほとんどが疑似コードであるため、変数を宣言しないと (明らかに) 機能しませんが、問題を解決する方法の基本的なアイデアが得られるはずです。

于 2014-05-25T04:00:29.523 に答える