Libgdx 世界责任

Libgdx 世界责任,libgdx,Libgdx,我最近开始学习libgdx,显然,我一直在研究一些示例游戏和教程 我忍不住注意到作者/开发者如何选择设计他们的游戏类的不一致性——特别是当涉及到“渲染器”类时 在一些示例中,我看到一些作者仅依赖“renderer”类使用SpriteBatch进行绘制。而其他人则倾向于向游戏对象发送SpriteBatch引用,以便自己进行渲染 例如,考虑一个Bird类,有些人会将它与纹理类型关联,加载它并在Bird.render方法中渲染鸟。其他人在单独的“渲染器”类(如WorldRenderer)中加载纹理,并

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

我忍不住注意到作者/开发者如何选择设计他们的游戏类的不一致性——特别是当涉及到“渲染器”类时

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

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


我在过去使用XNA编写了一些示例游戏,并将渲染逻辑嵌入到我的游戏类中。我的渲染器类用于简单地循环所有“已启用”的游戏对象,并调用“GameObject.render()”。这在libgdx中是一种糟糕的做法吗

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

这不是LibGDX中的错误做法,而是一个普遍的观点导向问题

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

但并不是每个人都这么做(有些人可能认为这是小题大做)。为每一件小事都使用渲染器类似乎太多了。所以你会看到很多代码混合了渲染和游戏逻辑

如果你想构建可伸缩的游戏,我建议你遵循MVC(游戏代码太大以至于开发者可能会迷路)。但与此同时,你应该足够务实,知道什么时候不使用它(制作小游戏需要两周时间)

所以这真的是由你来决定的,因为这是关于个人喜好的


希望这有帮助。

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


数组:游戏对象
阵列:鸟类(也在游戏对象中)
阵列:奶牛(也在游戏对象中)
阵列:猫(也在游戏对象中)


这使您可以决定所有游戏对象应依赖于哪个“z”轴(渲染),也可以立即循环(更新)

谢谢您的回答。我经常使用MVC,我很清楚你在说什么。但它让你想知道,如果像Scene2D这样的流行库将模型和视图结合在一起,那么这真的是一种糟糕的做法吗?在游戏世界里,我看不到100%的收益是可比的。例如,在MVC中,“Web设计器”可以自己构建视图,而不需要大量的编程经验。。。我不明白这在游戏开发中如何适用?在游戏中,数据的一个重要部分是某个东西在世界上的位置和大小。在大多数网页中,表单/数据显示在哪里并不重要。这使得游戏模型更难从渲染中分离出来。但请考虑尝试创建多个版本的涂鸦/超级跳线克隆。如果你有Bunny Hopper和Death Escaper,如果渲染是分开的,那么重新创建整个应用程序可能会更容易。