Libgdx Hud有两个阶段

Rus*_*ler 3 android hud stage libgdx

我有一个目前正在使用单个舞台的应用程序,但我需要添加一个侧面显示/部分作为HUD,其上有分数/生命等,因此HUD位于左侧,主手屏幕位于右侧.主游戏画面将被修复,不会四处移动.

从研究中我发现了一些解决方案.

1 - 两个阶段2 - 一组有两组,可能使用水平组3 - 两个摄像机一个阶段4 - 一个阶段,一个摄像机,但改变每组演员的摄像机位置.

我认为,选项1是我的偏好,但我有一些问题.

  • 阶段总是填满整个屏幕,还是我可以在我想要的地方开始?这将使右手屏幕更容易根据该屏幕的0,0计算位置,而不是总是必须将HUD的宽度添加到任何计算上.
  • 我是否需要处理视口?目前我没有使用一个(我认为这意味着我的舞台默认设置为缩放)但是由于这个原因,没有任何东西看起来很紧张.我对视口知之甚少,但似乎总是要与它们达成妥协,即黑条顶部或侧面.
  • 如果我有两个阶段,他们每个人都有自己的相机吗?我需要这个吗?我可以将右侧相机瞄准偏移,这样我仍然可以从0,0画出东西,而不是整个屏幕的左下角吗?

最后,关于主题,我对spritebatch有点困惑.我目前没有使用它,因为我使用的是舞台.那可以吗,还是我还应该以某种方式与舞台一起使用?并将我的所有演员添加到其中?

Ten*_*r04 6

我理解正确,你正在为你的游戏世界和你的HUD使用scene2d.并且HUD不会覆盖游戏世界,而是专门使用其自己的屏幕部分.

阶段并不总是填满整个屏幕.它们没有填充或不填充任何东西的概念,因为它们可以具有从屏幕上绘制的对象.但是,它们被剪切为由其视口定义的矩形.

在您的情况下,您似乎需要两个视口,因此需要两个阶段.你说你没有使用视口,但你是......舞台自动创建自己的ScalingViewport,其设置类似于StretchViewport.(文档中没有提到ScalingViewport,这已经过时了.)StretchViewport通常很糟糕,因为您的游戏会失真以适应设备的纵横比.

ExtendViewports不会导致黑条,只要你没有设置它们的最大宽度/高度,我认为通常是任何游戏世界观的最佳选择.

您可以将两个视口设置为覆盖您自己计算的屏幕的特定部分.由于这是一个专门的案例,我认为你必须直接子类化Viewport类(不是它的一个子类)并使用它们来操作它们viewport.setScreenBounds(...).

关于你的最后一个问题:是的,两个阶段中的每一个都有自己的视口,每个视口都有自己的摄像头.一旦设置了两个视口,每个视口都有自己的屏幕部分,您也可以将它们设置为将各自的左下角视为0,0.