游戏编程:将 main class 传递给每个对象

Game programming: passing main class to every object

我知道效率不高,但我真的不知道为什么。

大多数时候,当您实现游戏时,您会得到一个主 class,它有一个循环并更新每一帧并创建某些对象。

我的问题是为什么将 main class 传递给其构造函数中的每个对象被认为是无效的?

就我而言,我使用 LibGDX.

在 Java 为 Android 开发了我的游戏

谢谢!

它增加了耦合(多少对象相互依赖),因此降低了可重用性并具有生产 'spaghetti code' 的租赁。我真的不明白你所说的不是 'efficient' 是什么意思,但这就是你不应该这样做的原因。

您还应该考虑为什么在每个对象中都需要那个 main class。如果你真的认为你这样做,你可能需要重新考虑你的系统设计。您介意详细说明为什么您认为需要它吗?

它并非完全低效,因为(在一般情况下,afiak)当您考虑所需的 JVM 操作码数量时,传递对方法的引用是非常便宜的,但是,一种可能更有效的方法是创建游戏的静态实例 class 并从其他 classes 访问该静态字段。您必须自己测试这两个选项。

此外,传递对方法的引用可能会使维护代码变得更加困难,因为您最终添加了依赖项。

大多数情况下,这是耦合代码和做出正确设计决策的问题。

您应该尽可能避免 class 之间的依赖关系。使代码易于维护,整个设计更清晰。

考虑案例:您正在创建一款模拟赛车游戏。对于此类实体,您有一些 classes:车轮、引擎、变速杆旋钮等...和非实体:关卡、玩家...

假设您有一些要点(即 GameEngine class 您在其中创建实例)。

根据您的方法,您希望在实体构造函数(或相关的修改器方法)中传递 GameEngine 的实例。这不是最好的主意。

你真的想让 wheels 或 breaks 获得关于世界其他地方的知识(例如玩家的信息、分数、等级等)并让他们访问它的 public 接口方法?

所有 class 人员应尽可能承担较小的责任(以及对其他项目的了解)。

如果您确实需要参考某种要点对象,class请考虑使用 dependency injection tools, such as Dagger

它不会让你的游戏设计变得更好,但至少会迫使你更喜欢组合而不是继承——这会导致创建更好的代码。