游戏编程:将主类传递给每个对象

时间:2015-07-07 09:48:59

标签: java android libgdx

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

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

我的问题是为什么将主类传递给构造函数中的每个对象并不高效?

就我而言,我使用LibGDX开发了适用于Android的Java游戏。

谢谢!

3 个答案:

答案 0 :(得分:3)

它增加了耦合(对象相互依赖的程度),从而降低了可重复使用性,并且产生了“意大利面条代码”。我不明白你的意思是不是“有效”,但这就是你不应该这样做的原因。

您还应该考虑为什么在每个对象中都需要该主类。如果你真的认为你这样做,你可能需要重新考虑你的系统设计。您是否介意详细说明您认为自己需要它的原因?

答案 1 :(得分:1)

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

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

考虑一下这个案例:你正在创建一个模拟赛车游戏。你有这样的实体的几个类:轮子,引擎,换档旋钮等......和非实体:水平,玩家......

假设您有一些要点(即您创建实例的GameEngine类)。

根据你的方法,你想在实体构造函数(或相关的mutator方法)中传递GameEngine的实例。这不是最好的主意。

你真的想让轮子或休息时间掌握世界其他地方的知识(例如玩家的信息,分数,等级等)并让他们访问它的公共界面方法吗?

所有班级应尽可能承担较小的责任(以及其他项目的知识)。

如果您确实需要在类中引用某种主要点对象,请考虑使用dependency injection工具,例如Dagger

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

答案 2 :(得分:0)

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

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