我在游戏画面中使用舞台。在这个阶段,我有像游戏地图这样的演员(玩家可以移动,舞台的镜头移动并缩放(或重新定位)以保持视口内的地图),玩家和其他游戏内容。然后我通过扩展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就像绘图时那样)?或者我认为这一切都错了?
我还担心,当我在我的舞台相机中使用变焦时,它会弄乱坐标。这是现实吗?
答案 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仍然会在同一位置。