目前我有一系列与游戏相关的三个课程。我以前使用Unity制作游戏,您可以使用所有代码都可访问的功能访问相机等组件。但是,我当前的设置依赖于跨越其他类发送的每个类的实例。请参阅以下内容:
class World{
};
class Game{
Camera* camera;
World* world;
};
class Camera{
Game* game;
World* world;
};
这是设计不良的结果还是有时候设置如此 这是有道理的吗?
我宁愿在我当前的设置中使用静态类 将澄清代码,每个类只有一个实例 曾经使用过?
使用静态类有哪些可能的缺点 实例
编辑:为什么他们需要互相访问。
为什么相机需要世界: 由于需要从相机的角度渲染世界,因此相机需要访问世界。相机会根据所看到的内容触发世界渲染。渲染是通过相机中的各种方法触发的,例如移动时。
当绘制相机时,它会绘制它所看到的内容,例如世界。为了吸引世界,相机需要进入这个世界。
为什么相机需要游戏: 游戏具有诸如FPS之类的值,相机使用它来显示调试信息的叠加。
答案 0 :(得分:5)
紧密耦合的三个类确实提出了一些有问题的设计选择。尝试更改代码,以便例如Camera
获取指向World
的指针或引用,仅传递给它实际需要处理World
的方法。还要考虑Camera
和World
是否确实需要指向Game
的指针。从概念上讲,如果Game
有一个World
并且有一个Camera
而不是所有三个对象归其他人(谁)拥有,那么会更有意义吗?
Game
和Camera
之间的关系仍然只建议您将Game
或更好的相关数据FROM Game
作为方法参数传递给{{1}绘制方法。
答案 1 :(得分:1)
如果你有任何类的静态(全局)实例,它可以从任何地方访问,最终可能会出现“大泥泞”,这使得很难跟踪什么用途或需要什么。< / p>
所谓的“SOLID”原则的一个想法是
“细节应取决于抽象”
现在引入额外的抽象基类(或支持它们的语言中的接口)可能看起来更加复杂,但它可能会帮助您找到您需要从哪里获得的每个对象的哪些部分,并允许您说引入另一个{{1将来。
一种方法可能如下:
Game
(对于依赖性倒置原则),如this question
中所述对于你正在做的事情来说,这看起来似乎有些过分,但是让你更接近“一切都依赖于抽象的东西”,而不是“一切都依赖于其他一切”。