当前位置: 首页 > 知识库问答 >
问题:

Libgdx stage2d与另一台用于HUD的摄像机,如何处理坐标?

郎鹤龄
2023-03-14

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

public class Hud extends Group implements Disposable {

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

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就像画画一样,或者类似的东西)?还是我把这一切都想错了?

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

共有2个答案

苏振国
2023-03-14

我认为camera.unproject(touch pos)应该可以,但我从未使用过它。你必须搜索它。

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

顾烨磊
2023-03-14

对于创建HUD,通常可以在屏幕上使用多个阶段,这些阶段相互叠加。您甚至可以有两个以上,例如,当应用程序暂停和恢复时,在HUD顶部显示的暂停对话框。。。

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

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

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

这样你就可以随心所欲地创建不同的坐标系。尤其是在你的HUD中处理字体和标签的时候,它应该有一个与像素大小相匹配的坐标系,例如< code>setViewport(1280,768,true);或类似的,而您的场景可以有一个完全不同的场景。

 类似资料:
  • 使用时,保存的图像是独立的,因此图像的大小会变大。(~对于10个图像,大小约为9GB) 在提取docker图像后,我探索: 有没有办法有效地导出图像? 注:我已经提到了这一点。这个问题不是它的重复。它没有解决我上面提到的用例。

  • 问题内容: 我想在webrtc中使用IP摄像机。但是,webrtc似乎仅支持网络摄像头。因此,我尝试将IP摄像机的流转换为虚拟网络摄像机。 我找到了IP Camera Adapter之类的软件,但是它们运行不佳(每秒2-3帧,延迟2秒),并且只能在Windows上运行,我更喜欢使用Linux(如果可能)。 我尝试ffmpeg / avconv: 首先,我使用v4l2loopback创建了一个虚拟设

  • 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节我们将会讨论如何在OpenGL中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘和鼠标输入,最终完成一个

  • 我有一个校准的摄像机(固有矩阵和失真系数),我想知道摄像机的位置知道一些3D点和他们在图像中的对应点(2D点)。 我知道可以帮助我,读完这个和这个之后,我明白了solvePnP和的输出是物体在相机坐标系中的旋转和平移。 所以我需要找出世界坐标系中的相机旋转/平移。 我不知道Python/Numpy(我使用的是C++),但这对我来说没有多大意义: 从solvePnP输出的RVEC、tvec是3x1矩

  • 我需要在Android/Ios的xamarin中使用camera/gallery。有办法吗?

  • 摄像机是玩家观察游戏世界的窗口,场景中至少需要有一个摄像机,也可以同时存在多个摄像机。创建场景时,Creator 会默认创建一个名为 Main Camera 的摄像机,作为这个场景的主摄像机。多摄像机的支持可以让你轻松实现高级的自定义效果,比如双人分屏效果,或者场景小地图的生成。 摄像机属性 backgroundColor 当指定了摄像机需要清除颜色的时候,摄像机会使用设定的背景色来清除场景。 d