【问题标题】:Render Game World Smaller Than Screen Width and Height渲染小于屏幕宽度和高度的游戏世界
【发布时间】:2023-04-07 14:10:01
【问题描述】:

我目前正在开发一个 LibGDX 手机游戏应用程序。我遇到的问题是我希望世界宽度和高度为 480x480,屏幕宽度和高度为 640x480。屏幕上额外的 240 个单位将用于渲染 UI,有点像 ROTMG 或 Clash Royale(游戏中的卡片视图)。

我曾想过用另一台相机在游戏中渲染 UI,但这不是我想要的设计风格。我希望游戏的逻辑和坐标在世界的宽度和高度内,而不是为 UI 占用额外的空间。

我该怎么做?

附:游戏是二维的

附言我希望游戏在调整大小时保持此配置。

【问题讨论】:

    标签: java user-interface libgdx screen viewport


    【解决方案1】:

    Denfeet,创建一个包含 2 个 Group 实例的全屏 Stage - 其中一个用于 UI,另一个用于游戏。组:游戏的边界是 0、0、480、480。UI 的边界是 480、0、240、480。现在,如果你想在相对于游戏组的坐标中工作,例如,调用 Group.localToStageCoordinates(Vector2 localCoords)游戏组(或者让自己成为一个辅助方法,这样你就不必一直写这个长名字了)。 UI 和游戏逻辑也可以通过这种方式保持完全分离 - 神奇 :-)。

    【讨论】:

    • 哦,哇,我没想到!我会更多地研究 Group 类,但理论上如果你说我可以用组来做这件事,创建第二个阶段会更容易,还是更有效?谢谢
    • WonderfulWorld,我看了更多的groups,看到可以设置一个剔除区域,但是我还是不明白如何让camera和player在这个group中居中。我不是要代码示例(除非你可以),但请你详细说明你建议的帮助类
    • 好吧,如果可能的话,你绝对应该一次坚持 1 个阶段。我们只是说,除非您喜欢一遍又一遍地完全重写代码,否则这将为您保留最大的灵活性。摄像机以舞台为中心,而不是任何一个组,但这并不重要,因为您只需要正确布置您的游戏组。仅当您过度调用 Group.localToStageCoordinates() 时,辅助方法才有用,如果您使用 Group.addActor(),Actor 的边界将自动相对于 Group 的坐标(Actor)位置 0 起作用,0 是 Group 的 0, 0. 继续
    • Continue-> 建议你试试上面的,符合图书馆的流程。最后一点 - 一个更一般的提示,我建议尽可能少地折磨你正在使用的任何框架,并顺其自然 - 通常事情按照他们的方式工作是有原因的(这可能是一个不好的理由)。你会发现,每当你违背框架的精神时,你就会解开这个无休止的线程,这会让你浪费越来越多的时间来保持你的代码正常工作——这时你通常会发现,如果你想添加一个功能,从头开始重写更容易。
    【解决方案2】:

    我总是喜欢将我的游戏与 UI 分开。您可以创建一个全屏相机并使用 Scene2D 舞台将您的 UI 放在上面。除非您想要精确的尺寸,否则您不必担心定位,因为您只需覆盖您的 UI 元素。如果您还想为您的游戏使用一个阶段,那么只需创建第二个阶段,一个用于游戏,一个用于 UI。

    无论如何,看起来你是在以像素为单位思考。你的游戏不需要知道像素,只需要你的游戏世界渲染多少。如果我有一个10 x 10 单位大的图块,并且我想向玩家展示一个由10x10 组成的方块,我将为它创建一个new FitViewport(100, 100)Viewport 将世界单位计算回它正在运行的设备上的像素。这使您或任何为您的程序工作的人更合乎逻辑。我的播放器不是256 pixels 高,因为那是图像的高度,没有我的播放器是1,80m 高并使用图像显示。如果他想像忍者一样跳跃,他应该跳过另一个玩家说2m,然后他会落在9.8m/s

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多