Libgdx stage2d与另一台HUD相机,如何处理坐标?

时间:2014-03-12 16:20:07

标签: java libgdx scene2d

我在游戏画面中使用舞台。在这个阶段,我有像游戏地图这样的演员(玩家可以移动,舞台的镜头移动并缩放(或重新定位)以保持视口内的地图),玩家和其他游戏内容。然后我通过扩展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
}

绘图工作正常,但问题是(触摸和其他)事件。他们的坐标错误。我该如何解决这个问题。我试图覆盖命中(float x,float y,boolean touchable)方法,并考虑覆盖localToParentCoordinates和parentToLocalCoordinates方法。但是我会把它放在哪里(乘以hudCamera.combined就像绘图时那样)?或者我认为这一切都错了?

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

2 个答案:

答案 0 :(得分:12)

对于创建HUD,您通常可以在屏幕上使用多个阶段,这些阶段将在彼此之上呈现。你甚至可以有两个以上,例如for Pause-Dialog,当应用程序暂停并恢复时,在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);或类似的,而你的场景可以有一个完全不同的场景。

答案 1 :(得分:2)

我认为camera.unproject(touchpos)应该有效,但我从未使用它。你必须搜索它。

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