我刚刚阅读了当我输入主题时出现的一些相关问题,所以我会尽量不重复这些问题。
我最近开始重新审视一个我在两三年前开始的学习项目 - 一个Mega Man引擎的C ++端口。是的我用过撕裂的精灵。我还使用游戏引擎库进行绘画,音乐和输入。
我的原始代码非常糟糕。虽然它可以(但几乎没有)被称为OO,但它完全忽略了这一点。我开始添加类似接口的东西,并删除了大量重复的代码。有一些我不确定的事情,因为游戏设计有时变得非常复杂。
代表我的游戏库的对象目前是全局的(我知道全局变量通常很糟糕),因为很多对象可能会依赖它来加载艺术或音乐。什么是将该对象从全局范围中拉出来的最佳方法,而不必将50个参数传递给否则将直接使用它的所有内容?
下一个问题:众所周知,Mega Man射击了很多小小的白色射弹。目前,Player对象负责他发射的Projectile对象,更新它们的位置等(字面意思是,在Player :: Update()方法中,每次镜头调用一次Projectile :: Update()方法)。这是错误的方法吗?我的第一个改进是让所有这些对象实现了DrawingObject接口,这样我的游戏就可以绘制所有内容。为Updates做同样的事情意味着我将玩家的控制权从玩家手中夺走并将其交给更广泛的Game对象。我对此犹豫不决的原因是它感觉像上帝对象反模式。或者我误解了反模式?还有其他复杂性 - 射弹如果离开可见屏幕就会死亡,因此任何更新射弹的调用都需要调用者能够访问屏幕对象。
现在一切都是这样,当我到达他们时,我会回来遇到更多问题。第一篇文章结束!
答案 0 :(得分:7)
至于使一个类全局我将使用单例,然后只调用Game :: GetInstance(),它将返回指向全局类的指针。
就粒子而言,我总是处理游戏的方式是创建一个管理所有对象的类。在我的游戏主循环中,我将调用类UpdateObjects函数,该函数将通过它存储的项目列表并调用每个Update函数。 Render and Collision也是如此。
答案 1 :(得分:2)
我过去曾对游戏设计进行过修改,但我不能声称自己是专家。
为了全局访问对象,我建议使用singleton
对于移动对象,我建议将所有内容都设置为理解屏幕位置并具有更新方法的父类。每当创建一个新对象时,将其添加到包含所有对象的向量中,每帧一次,您逐步执行向量并对所有对象运行更新。
答案 2 :(得分:2)
代表我游戏的对象 图书馆目前是全球性的(我知道 全局性通常很糟糕)因为很多 物体可能在这里和那里依赖它 对于像装载他们的艺术或 音乐。什么是最好的方式 把那个物体拉出全球 范围,无需通过五十 所有事情的参数 否则直接使用它?
我同意上述单身人士解决方案。
下一个问题:众所周知,Mega 男人射大量的小白 弹丸。目前,玩家 对象负责 他发射的弹丸物体,正在更新 他们的立场等(字面意思, 调用Projectile :: Update() 方法每次射击,内部 Player :: Update()方法)。
代码构造有一个敏捷的设计原则叫做:“单一责任原则”。根据它“从来没有超过一个原因的一个原因 CLASS TO CHANGE。“所以我想我首先要分开Player类的职责来分离类:例如一个用于定位,一个用于解雇。
查看主题SRP
的示例和更多内容