1

我在我的游戏屏幕中使用了一个舞台。在这个阶段,我有一些演员,比如游戏地图(玩家可以在其中移动,并且舞台的摄像机沿着移动并缩放(或重新定位)以将视口保持在地图内)、玩家和其他游戏内容。然后我添加了一个通过扩展 Group 制作的 HUD 元素:

public class Hud extends Group implements Disposable {

在这个类中,我定义了一个新的 OrthographicCamera:

hudCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

我想用这台相机让 HUD 在屏幕上保持静止。我是这样画的:

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
    batch.setProjectionMatrix(hudCamera.combined);
    //Then draw my HUD stuff
}

绘图工作正常,但问题是(触摸和其他)事件。他们有错误的坐标。我该如何解决这个问题。我试图覆盖 hit(float x, float y, boolean touchable) 方法并考虑覆盖 localToParentCoordinates 和 parentToLocalCoordinates 方法。但是我会在其中放入什么(在绘图时乘以 hudCamera.combined 或类似的东西)?还是我认为这一切都错了?

我还担心,当我在舞台的相机中使用变焦时,它会弄乱坐标。这是现实吗?

4

2 回答 2

13

为了创建 HUD,您通常可以在屏幕上使用多个舞台,这些舞台彼此叠加。您甚至可以拥有两个以上,例如暂停和恢复应用程序时在 HUD 顶部呈现的暂停对话框...

您只需要确保在 render() 方法中它们以正确的顺序绘制:

public void render(float delta) {
  scene.act(delta);
  hud.act(delta);
  pauseDialog.act(delta);

  scene.draw();
  hud.draw();
  pauseDialog.draw();
}

这样您就可以根据自己的喜好创建不同的坐标系。尤其是在使用 HUD 中的字体和标签时,它应该有一个与像素大小相匹配的坐标系,例如setViewport(1280,768,true);或类似的,而你的场景可以有一个完全不同的坐标系。

于 2014-03-13T10:40:38.180 回答
2

我认为camera.unproject(touchpos)应该可以,但我从未使用过它。您将不得不搜索它。

我建议使用 2 个阶段,因为游戏和 HUD 是屏幕的独立部分。通过使用 2 Stages,您有 2 个摄像头,每个 1 个Stage。然后,您可以移动游戏camera,HUD 仍将位于同一位置。

于 2014-03-13T07:01:37.610 回答