【问题标题】:2D Game Development "God class" [closed]2D 游戏开发“神级”[关闭]
【发布时间】:2013-01-30 13:12:46
【问题描述】:

我正在使用 SFML API 在 C++ 中开发 2D 游戏,但我遇到了类设计问题。 我认为我违反了 SRP(单一责任原则),因为我有一个名为“游戏”的主类应该处理窗口。它包含一个包含主游戏循环的方法。 现在的问题;它包含超过5个类的对象(组合),例如Player、Menu、SplashScreen。 您认为创建这样的“上帝”类是一个好主意吗?你知道我可以从中学习的任何开源 C++ 2D 游戏吗? 提前谢谢你。

【问题讨论】:

  • 您的设计是否有问题,或者您只是想考虑一下?如果您不确定,有时继续使用您所拥有的东西进行编码并找出它的优点和缺点并不是一个坏主意。一路上你会学到各种各样的东西。
  • 我只是不确定。我搜索了整个堆栈溢出,发现了几篇关于“上帝”类的帖子(不幸的是,它们不是关于游戏开发的)。我自己也不觉得不好,但是我看到有几个人说创建这样的类不是一个好习惯。
  • 我同意@paddy。如果您以前从未做过这种事情,那么您确实会学到很多东西,并且在您对自己所写的内容感到满意之前可能会遇到几次“失败”。至于你的最后一个问题,试试这里:en.wikipedia.org/wiki/List_of_open_source_video_games
  • 如果你因为学术耻辱而回避有用的范式,你将把所有的时间都花在重构代码上,并且永远无法完成你的项目。让它变得有点邋遢,让你的游戏变得有趣。你制作的下一个游戏会有更好的结构。接下来....
  • 感谢您的回答!我只是不想学习坏习惯,这就是我问的原因。我会照你说的做;当我完成开发时,我会在这里发布一篇关于我的经验的文章。

标签: c++ 2d-games god-object


【解决方案1】:

请参阅 Gamedev 网站上的 thread 关于上帝类的内容(是的,它们是个坏主意,因为紧耦合会使代码在面对变化时变得不那么健壮)。

不了解 2D,但有一个完整的 GitHub repo 带有 id-Software 3D 游戏引擎。除了图形,这应该为您提供一个宝库。另请参阅 Doom source code review,了解有关编写游戏的良好编码风格的想法。

【讨论】:

  • 我到底应该把什么视为神级?一个有几个职责的类?如果是这样,包含整个游戏循环的类是否应该被视为神类?它还包含诸如 Player、SplashScreen 等具有 'move' 等方法的对象,但它们都在 gameLoop 方法中调用。
  • @Brukmoon 是的,许多不相关的职责应该被重构为单独的类。请参阅此article 以获取一个小的编码示例。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2011-03-09
  • 2017-11-08
  • 2012-09-02
相关资源
最近更新 更多