我对 Scene2D 和阶段没有任何经验,但我将如何做一个简单的健康栏:
- 创建一个矩形并用颜色或纹理填充它。
- 当玩家失去生命值时,将矩形缩小与损失生命值相同的百分比。
- 创建具有屏幕高度/宽度的基本正交相机。我通常称之为 viewportCam。
- 在所有其他绘制逻辑下,您也可以更改 SpriteBatch
spriteBatch(viewportCam.Combined)
- 在这个 spritebatch 中,您可以绘制生命条。
public void Draw()
{
spriteBatch(normalCam.combined);
spriteBatch.begin();
//Normal draw logic.
spriteBatch.end();
spriteBatch(viewportCam.combined);
spriteBatch.begin();
//Draw UI elements last so the will be drawn on top of the rest.
spriteBatch.end();
}
- 如果您在生命条后面画一个稍大的矩形,您自己就有了一个边框。
- 您可以根据剩余的生命值百分比更改颜色。
编辑
刚刚再次遇到此问题,目前正在使用另一种方法。我是一个 1 像素宽的红色渐变的九个补丁。 health = new NinePatch(gradient, 0, 0, 0, 0) 这确保在拉伸时不会出现伪影。从这里我只是计算它需要多长时间并绘制它。
width = currentHealth / totalHealth * totalBarWidth;
现在你可以在任何你想要的地方画它。
health.draw(batch, 10, 10, width, gradient.getHeight);
如果你想要它的某种容器,你可以为它设置一个 Ninepatch 并在后台的动态健康之前绘制它。因此,假设容器在顶部/底部大 2,在左/右大 5。
container = new NinePatch(containerRegion, 5, 5, 2, 2);
//Offset it by the dynamic bar, let's say the gradient is 4 high.
container.draw(batch, 5, 8, totalBarWidth + 10, 8);
health.draw(batch, 10, 10, width, 4);
我将容器 5“硬编码”到左侧,并将其延长 10 以使其水平放置。在垂直方向上,我将其降低了 2 倍,并将其提高了 8 倍,以完美贴合横杆。