我正在尝试在当前阶段的顶部实现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;
}
}
我还通过设置按钮的边界进行了测试,但它没有响应事件。 感谢阅读和帮助。
答案 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是阶段。