我最近开始学习libgdx,显然,我一直在研究几个示例游戏和教程。
我忍不住注意到作者/开发者如何选择设计他们的游戏类的不一致 - 特别是当涉及到“渲染器”类时。
在某些示例中,我看到一些作者完全依赖于“渲染器”类来使用SpriteBatch进行绘制。而其他人倾向于向游戏对象发送SpriteBatch引用来自行渲染。
例如,考虑 Bird 类,有些人会将它与 Texture 类型相关联,加载它并在 Bird.render中呈现鸟类方法。其他人在单独的“渲染器”类中加载纹理(如 WorldRenderer )并依靠位置参数(如鸟类)从那里绘制鸟纹理.getX()和bird.getY()。
我过去曾使用XNA编写过一些示例游戏,我曾经将渲染逻辑嵌入到我的游戏类中。我的渲染器类过去只是循环遍历所有“启用”的游戏对象并调用“GameObject.render()”。这在libgdx中是不好的做法吗?
答案 0 :(得分:2)
这不是关于libgdx中的错误做法 ,这是一个普遍的意见导向问题。
通常情况下,如果你可以将游戏逻辑和渲染逻辑分开(最好是在不同的类中),那总是更好。这样,如果你想稍后改变游戏的外观(重新修饰它),你将不必触及包含游戏逻辑的代码(需要的测试更少,没有新的错误)。
但不是每个人都遵循这一点(有些人可能会认为这对小事来说太过分了)。为每个小东西设置渲染器类可能看起来太多了。所以你会看到很多代码混合了渲染和游戏逻辑。
如果你想构建可扩展的游戏,我建议你遵循MVC(游戏代码太大,开发人员可能会迷路)。但与此同时,你应该务实地知道何时不使用它(小游戏需要2周时间)。
所以,你真的要做出决定,因为这是关于个人喜好的。
希望这有帮助。
答案 1 :(得分:1)
很多可能取决于开发人员之前是否使用过MVC(模型 - 视图 - 控制器)。在MVC设计中,游戏"像鸟这样的物体是模型的一部分,不要直接与显示器(视图)有任何关系。有时它取决于所使用的技术,例如LibGDX Scene2d API警告你"场景图的缺点是他们将模型和视图结合起来"。
答案 2 :(得分:0)
在worldRenderer中,您应该渲染所有对象。你的所有物品属于一个世界,所以它是有道理的。增加注意力的一个好处是,您可以始终将所有游戏对象保存在单独的数组中以及大数组(包含所有数组)中。
Array: GameObjects
Array: Birds (also in GameObjects)
Array: Cows (also in GameObjects)
Array: Cats (also in GameObjects)
这使您可以决定" z"轴所有游戏对象应该依赖(渲染)以及直接循环它们(更新)