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

plo*_*su2 1 java libgdx scene2d

我在游戏画面中使用了一个舞台.在这个阶段,我有像游戏地图这样的演员(玩家可以移动,舞台的镜头移动并缩放(或重新定位)以保持视口在地图内),玩家和其他游戏内容.然后我通过扩展Group添加我制作的HUD元素:

public class Hud extends Group implements Disposable {
Run Code Online (Sandbox Code Playgroud)

在本课程中,我定义了一个新的OrthographicCamera:

hudCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Run Code Online (Sandbox Code Playgroud)

我想用这台相机让HUD固定在屏幕上.我像这样画画:

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

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

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

flo*_*hge 12

对于创建HUD,您通常可以在屏幕上使用多个阶段,这些阶段将在彼此之上呈现.您甚至可以有两个以上,例如,当应用程序暂停并恢复时,在HUD顶部呈现的暂停对话框...

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

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

  scene.draw();
  hud.draw();
  pauseDialog.draw();
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以根据需要创建不同的坐标系.特别是在HUD中使用字体和标签时,它应该具有与像素大小匹配的坐标系,例如setViewport(1280,768,true);或类似,而您的场景可以具有完全不同的坐标系.