我刚刚阅读了输入主题时出现的一些相关问题,因此我将尽量不再重复。
我最近开始重新审视大约两三年前开始的一个学习项目 - 洛克人引擎的 C++ 端口。是的,我使用了撕裂的 Sprite 。我还在使用游戏引擎库进行绘图、音乐和输入。
我的原始代码很糟糕。虽然它可以(但勉强)被称为 OO,但它完全没有捕获要点。我已经开始添加接口(interface)之类的东西,并删除了大量重复的代码。有些事情我不确定,因为游戏设计有时会变得非常复杂。
代表我的游戏库的对象目前是全局的(我知道全局通常是不好的)因为许多对象可能在这里和那里依赖它来加载他们的艺术或音乐。将对象从全局范围中拉出的最佳方法是什么,而不必将五十个参数传递给原本会直接使用它的所有对象?
下一个问题:众所周知,洛克人会射出许多白色的小弹丸。目前,Player 对象负责他发射的 Projectile 对象,更新它们的位置等(字面意思是,在 Player::Update() 方法中为每次射击调用一次 Projectile::Update() 方法)。这是错误的方法吗?我的第一个改进是让所有这些对象实现一个 DrawnObject 接口(interface),这样我的游戏就可以绘制所有内容。对 Updates 做同样的事情意味着我从 Player 手中夺走了射弹的控制权,并将其交给了更广泛的 Game 对象。我对此犹豫不决的原因是它感觉像是上帝对象反模式。还是我误解了所说的反模式?仍然涉及额外的复杂性 - 抛射物如果离开可见屏幕就会死亡,因此任何更新抛射物的调用都需要调用者能够访问屏幕对象。
目前就这些,当我遇到更多问题时,我会回来的。第一篇文章结束!
最佳答案
至于使类成为全局类,我会使用单例,然后只需调用 Game::GetInstance() 即可返回指向全局类的指针。
就粒子而言,我一直处理游戏的方式是创建一个管理所有对象的类。在我的游戏主循环中,我将调用该类 UpdateObjects 函数,该函数将遍历它存储的项目列表并调用其中的每个 Update 函数。渲染和碰撞也是如此。
关于C++游戏、类设计和职责,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1332146/