C++游戏,课堂设计和职责

Tes*_*rex 5 c++ oop

我刚刚读了一些关于主题的相关问题,所以我会尽量不重复这些问题.

我最近开始重新审视一个我在两三年前开始的学习项目 - 一个Mega Man引擎的C++端口.是的我用过撕裂的精灵.我还使用游戏引擎库进行绘图,音乐和输入.

我的原始代码是残暴的.虽然它可以(但几乎没有)被称为OO,但它完全忽略了这一点.我开始添加类似接口的东西,并删除了大量重复的代码.有一些我不确定的事情,因为游戏设计有时变得非常复杂.

代表我的游戏库的对象目前是全局的(我知道全局变量通常很糟糕),因为许多对象可能会依赖它来加载艺术或音乐.什么是将该对象从全局范围中拉出来的最佳方法,而不必将50个参数传递给否则将直接使用它的所有内容?

下一个问题:众所周知,Mega Man会射出许多小小的白色射弹.目前,Player对象负责他发射的Projectile对象,更新它们的位置等(字面意思是,在Player :: Update()方法中,每次镜头调用一次Projectile :: Update()方法).这是错误的方法吗?我的第一个改进是让所有这些对象实现了DrawingObject接口,这样我的游戏就可以绘制所有内容.为Updates做同样的事情意味着我将玩家的控制权从玩家手中夺走并将其交给更广泛的Game对象.我对此犹豫不决的原因是它感觉像上帝对象反模式.或者我误解了反模式?还有其他复杂性 - 射弹如果离开可见屏幕就会死亡,因此任何更新射弹的调用都需要调用者能够访问屏幕对象.

这一切都是现在,当我到达他们时,我会回来遇到更多问题.第一篇文章结束!

Rya*_*ney 7

至于创建一个全局类,我会使用一个单例,然后只调用Game :: GetInstance(),它将返回一个指向全局类的指针.

就粒子而言,我一直处理游戏的方式是创建一个管理所有对象的类.在我的游戏主循环中,我将调用类UpdateObjects函数,该函数将通过它存储的项目列表并调用每个Update函数.Render和Collision也是如此.