Libgdx 有两个阶段的 HUD
Libgdx Hud with two stages
我有一个应用程序目前只能使用一个阶段,但我需要添加一侧 display/section 作为 HUD,上面有 scores/lives 等,这样 HUD 就在左边, 以及右侧的主手屏幕。游戏主画面固定不动。
通过研究,我找到了几个解决方案。
1 - 两个阶段
2 - 一个有两个组的组,可能使用水平组
3 - 两个相机一个阶段
4 - 一个舞台,一个摄像机,但为每组演员改变摄像机的位置。
我认为,选项 1 是我的偏好,但我有一些问题。
- 阶段总是填满整个屏幕,还是我可以从我想要的地方开始?这将使右侧屏幕更容易根据该屏幕的 0,0 计算位置,而不是总是必须将 HUD 的宽度添加到任何计算中。
- 我需要处理视口吗?目前我没有使用一个(我认为这意味着我的舞台默认设置为缩放)但是看起来没有任何东西因此而被拉伸。我对视口知之甚少,但似乎总是要对它们做出妥协,即顶部或侧面的黑条。
- 如果我有两个舞台,他们每个人都有自己的相机吗?我需要解决这个问题吗?我是否可以将右手相机对准一个偏移量,这样我仍然可以从 0,0 开始绘制东西,因为那是右舞台的左下角,而不是整个屏幕?
最后跑题了,我对spritebatch有点迷茫。我目前没有使用一个,因为我使用了一个舞台。这样可以吗,还是我仍然应该以某种方式将其与舞台结合使用?并将我所有的演员都加入其中?
据我了解,您正在为您的游戏世界和您的 HUD 使用 scene2d。而且 HUD 不会覆盖游戏世界,而是专门使用它自己的屏幕部分。
舞台并不总是填满整个屏幕。它们没有填充或不填充任何东西的概念,因为它们可以有被绘制出屏幕的对象。但是,它们被裁剪到由其视口定义的矩形。
在您的情况下,您似乎需要两个视口,因此需要两个阶段。你说你没有使用 Viewport,但你是......Stage 自动创建它自己的 ScalingViewport,它设置得像 StretchViewport。 (文档中没有提到 ScalingViewport,它已经过时了。)StretchViewport 通常不好,因为你的游戏会扭曲以适应设备的宽高比。
ExtendViewports 不会导致黑条,只要您不对其设置最大值 width/height,我认为通常是任何游戏世界视图的最佳选择。
您可以将两个视口设置为覆盖您自己计算的屏幕的特定部分。由于这是一个特殊情况,我认为您将不得不直接子class Viewport class(不是它的子classes之一)并使用[=10=操作它们中的每一个].
关于你的最后一个问题:是的,两个阶段都有自己的视口,每个视口都有自己的相机。将两个视口设置为各自拥有自己的屏幕部分后,您还可以将它们设置为将各自的左下角视为 0,0。
我有一个应用程序目前只能使用一个阶段,但我需要添加一侧 display/section 作为 HUD,上面有 scores/lives 等,这样 HUD 就在左边, 以及右侧的主手屏幕。游戏主画面固定不动。
通过研究,我找到了几个解决方案。
1 - 两个阶段 2 - 一个有两个组的组,可能使用水平组 3 - 两个相机一个阶段 4 - 一个舞台,一个摄像机,但为每组演员改变摄像机的位置。
我认为,选项 1 是我的偏好,但我有一些问题。
- 阶段总是填满整个屏幕,还是我可以从我想要的地方开始?这将使右侧屏幕更容易根据该屏幕的 0,0 计算位置,而不是总是必须将 HUD 的宽度添加到任何计算中。
- 我需要处理视口吗?目前我没有使用一个(我认为这意味着我的舞台默认设置为缩放)但是看起来没有任何东西因此而被拉伸。我对视口知之甚少,但似乎总是要对它们做出妥协,即顶部或侧面的黑条。
- 如果我有两个舞台,他们每个人都有自己的相机吗?我需要解决这个问题吗?我是否可以将右手相机对准一个偏移量,这样我仍然可以从 0,0 开始绘制东西,因为那是右舞台的左下角,而不是整个屏幕?
最后跑题了,我对spritebatch有点迷茫。我目前没有使用一个,因为我使用了一个舞台。这样可以吗,还是我仍然应该以某种方式将其与舞台结合使用?并将我所有的演员都加入其中?
据我了解,您正在为您的游戏世界和您的 HUD 使用 scene2d。而且 HUD 不会覆盖游戏世界,而是专门使用它自己的屏幕部分。
舞台并不总是填满整个屏幕。它们没有填充或不填充任何东西的概念,因为它们可以有被绘制出屏幕的对象。但是,它们被裁剪到由其视口定义的矩形。
在您的情况下,您似乎需要两个视口,因此需要两个阶段。你说你没有使用 Viewport,但你是......Stage 自动创建它自己的 ScalingViewport,它设置得像 StretchViewport。 (文档中没有提到 ScalingViewport,它已经过时了。)StretchViewport 通常不好,因为你的游戏会扭曲以适应设备的宽高比。
ExtendViewports 不会导致黑条,只要您不对其设置最大值 width/height,我认为通常是任何游戏世界视图的最佳选择。
您可以将两个视口设置为覆盖您自己计算的屏幕的特定部分。由于这是一个特殊情况,我认为您将不得不直接子class Viewport class(不是它的子classes之一)并使用[=10=操作它们中的每一个].
关于你的最后一个问题:是的,两个阶段都有自己的视口,每个视口都有自己的相机。将两个视口设置为各自拥有自己的屏幕部分后,您还可以将它们设置为将各自的左下角视为 0,0。