Libgdx Hud Stage Button不是听力事件

时间:2016-01-07 06:37:34

标签: libgdx touch imagebutton hud

我正在尝试在当前阶段的顶部实现HUD阶段。我能够渲染和绘制HUD舞台,但其按钮的触摸事件没有响应。

我从GameScreen的draw()方法调用我的drawHUD()。 drawHUD()的代码是

public void drawHud(int scoreVal){
    Hud.this.getCamera().update();
    Hud.this.hudSpriteBatch.setProjectionMatrix(Hud.this.getCamera().combined);
    hudSpriteBatch.begin();
    scoreStr = "Score: " + scoreVal;
    glyphLayout.setText(scoreFont, scoreStr);
    halfWidth = glyphLayout.width/2;
    halfHeight = glyphLayout.height/2;
    scoreFont.draw(hudSpriteBatch, scoreStr, EatGame.CAMERA_WIDTH/2 - halfWidth, EatGame.CAMERA_HEIGHT - halfHeight);
    hudSpriteBatch.end();       
}

我在创建HUD时为我的pauseBtn添加了一个监听器

pauseBtn.addListener(new InputListener() {
        @Override
        public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
            System.out.println("PauseBtn Touched");
            return false;
        }
}

我还通过设置按钮的边界进行了测试,但它没有响应事件。 感谢阅读和帮助。

2 个答案:

答案 0 :(得分:1)

通常您使用scene2d API来实现按钮和类似的东西。 Stage类负责处理正确actor上的事件。看看Stage#touchDown()他们是如何做到的。如果你想自己实现这个,你必须实现一个全局触摸侦听器并检查,如果坐标在按钮的边界内,然后在按钮上调用fire并使用正确的{{1}对象。

我强烈建议使用scene2d api,它更容易编写自己的命中检测 - 触发事件系统。

答案 1 :(得分:0)

我不得不使用InputMultiplexer从两个阶段获取输入事件。我这样做了。

    InputMultiplexer multiplexer = new InputMultiplexer();
    multiplexer.addProcessor(GameScreen.this);
    multiplexer.addProcessor(hud);
    Gdx.input.setInputProcessor(multiplexer);

这样它将从两个阶段接收事件。 GameScreen和Hud是阶段。