【问题标题】:WorldRenderer responsibilitiesWorldRenderer 职责
【发布时间】:2014-03-20 15:07:23
【问题描述】:

我最近开始学习 libgdx,显然,我一直在研究几个示例游戏和教程。

我不禁注意到作者/开发者选择设计他们的游戏类的方式不一致 - 尤其是在“渲染器”类方面。

在某些示例中,我看到一些作者仅依靠“渲染器”类来使用 SpriteBatch 进行绘制。而其他人则倾向于向游戏对象发送 SpriteBatch 引用来自己进行渲染。

例如,考虑到一个 Bird 类,有些人会将其与 Texture 类型相关联,加载它并在 Bird.render 中渲染鸟em> 方法。其他人将 Texture 加载到单独的“Renderer”类(如 WorldRenderer)中,并依靠位置参数(如鸟)从那里绘制鸟纹理.getX() 和bird.getY()。

我过去使用 XNA 编写了一些示例游戏,并且曾经将渲染逻辑嵌入到我的游戏类中。我的渲染器类曾经简单地遍历所有“启用”的游戏对象并调用“GameObject.render()”。这是 libgdx 中的一个不好的做法吗?

【问题讨论】:

    标签: libgdx


    【解决方案1】:

    这与 libgdx 中的不良做法 无关,这是一个普遍的意见导向问题。

    通常,将游戏逻辑和渲染逻辑分开(最好在不同的类中)总是更好。这样,如果您以后想更改游戏的外观和感觉(重新皮肤),您就不必接触包含游戏逻辑的代码(所需的测试更少,没有新的错误)。

    但并不是每个人都遵循这一点(有些人可能认为这对小事来说太过分了)。为每一件小事设置渲染器类似乎太多了。所以你会看到很多代码混合了渲染和游戏逻辑。

    如果您想构建可扩展的游戏,我建议您遵循 MVC(游戏代码太大,开发人员可能会迷失方向)。但同时,你应该足够务实,知道什么时候不使用它(小游戏需要 2 周的时间来制作)。

    所以真正由你来决定,因为这与个人喜好有关。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      很大程度上可能取决于开发人员以前是否使用过 MVC(模型-视图-控制器)。在 MVC 设计中,像鸟这样的“游戏”对象是模型的一部分,与显示(视图)没有任何直接关系。有时这取决于所使用的技术,例如 LibGDX Scene2d API 会警告您“场景图存在耦合模型和视图的缺点”。

      【讨论】:

      • 感谢您的回答。我大量使用 MVC,我确切地知道你在说什么。但这让你想知道,如果像 Scene2D 这样的流行库将模型和视图结合起来——这真的是一种糟糕的做法吗?我不认为在游戏世界中收益是 100% 可比的。比如在 MVC 中,“Web Designer”可以自己构建视图,不需要丰富的编程经验……我不明白这如何适用于游戏开发?
      • 在游戏中,数据的一个重要部分是某物在世界上的位置以及它有多大。在大多数网页中,表单/数据的显示位置并不重要。所以这使得游戏模型更难从渲染中分离出来。但是考虑尝试创建多个版本的涂鸦/超级跳线克隆。如果你有 Bunny Hopper 和 Death Escaper,如果渲染是分开的,那么重新设计整个应用程序可能会更容易。
      【解决方案3】:

      在 worldRenderer 中,您应该渲染所有对象。你所有的对象都属于一个世界,所以这是有道理的。需要注意的一个好处是,您始终可以将所有游戏对象保存在单独的数组中,也可以保存在一个大数组中(包含所有)。

      Array: GameObjects Array: Birds (also in GameObjects) Array: Cows (also in GameObjects) Array: Cats (also in GameObjects)

      这使您可以决定所有游戏对象应依赖(渲染)的“z”轴以及立即循环遍历它们(更新)

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 2016-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多