C++游戏、类设计和职责

标签 c++ oop

我刚刚阅读了输入主题时出现的一些相关问题,因此我将尽量不再重复。

我最近开始重新审视大约两三年前开始的一个学习项目 - 洛克人引擎的 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/

相关文章:

php - 传入连接对象还是在类中创建它? (面向对象)

c++ - LLVMContext 作为类成员会破坏构造函数吗?

c++ - 将 std::string 转换为 char * 替代

c++ - 如何实现嵌套流畅的接口(interface)?

c++ - GetMessage 超时

matlab - Matlab 编码器的 OOP Matlab 继承问题(Simulink MATLAB 功能 block )

design-patterns - 这是哪种设计模式?

java - 如何在所有子构造函数中自动包含父方法的执行?

c++ - 如何访问其派生类的 protected 成员。如果派生类中已声明具有相同名称的函数?

java - Java中的简单继承是什么设计模式?