我正在开发使用 libgdx 制作的游戏,该游戏需要在我的游戏屏幕上方添加一些 GUI。类似于FrameLayout
Android 中的东西。
我有 GameScreen 一切都在发生。我现在想要的是添加一个“暂停”按钮、高分信息等。
我尝试将Stage
对象与常规精灵绘图结合起来。但是我在处理输入时遇到了一些问题:如果用户在舞台上单击暂停按钮,或单击游戏区域(我应该在其中添加一些项目符号),如何管理......
我正在开发使用 libgdx 制作的游戏,该游戏需要在我的游戏屏幕上方添加一些 GUI。类似于FrameLayout
Android 中的东西。
我有 GameScreen 一切都在发生。我现在想要的是添加一个“暂停”按钮、高分信息等。
我尝试将Stage
对象与常规精灵绘图结合起来。但是我在处理输入时遇到了一些问题:如果用户在舞台上单击暂停按钮,或单击游戏区域(我应该在其中添加一些项目符号),如何管理......
您应该能够使用 aStage
来管理您的 UI。为了使输入正常工作,您需要添加一个InputMultiplexer
,以便Stage
您当前的输入方案都将获得输入。
要进行设置,您将执行以下操作:
InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(stage);
multiplexer.addProcessor(gameScreenInputProcessor);
Gdx.input.setInputProcessor(multiplexer);
(代码示例基于来自https://code.google.com/p/libgdx/wiki/InputEvent的代码)
请注意,顺序很重要(我猜您会希望舞台首先获取事件以查看 UI 是否被触摸)。此外,来自输入事件处理程序的布尔返回值对于多路复用器更为重要,因为“已处理”事件不会被多路复用器传播。内部的 UI 事件Stage
有自己的“已处理”标志(大多数情况下它会做正确的事情,但有一些细微的差别)。
一种替代方法InputMultiplexer
是创建一个“GameScreenActor”(一个新的子类Actor
),其中包含您插入到全局的当前游戏屏幕Stage
。不过,您必须将输入处理移至 scene2d 方法。这可能不是您的正确选择,但它是一个可行的选择。