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

2D游戏开发“;“上帝级”; 我正在用SFML API开发C++中的2D游戏,但是我对类设计有问题。 我认为我违反了SRP(单一责任原则),因为我有一个名为“游戏”的主要类来处理窗口。它包含一个包含主游戏循环的方法。 现在问题来了,;它包含5个以上类的对象(组合),如播放器、菜单、SplashScreen。 你认为创建这样的“上帝”类是个好主意吗?你知道我可以学习的开源C++游戏吗? 提前感谢。,c++,2d-games,god-object,C++,2d Games,God Object,在Gamedev网站上看到关于上帝类的内容(是的,这是个坏主意,因为紧密耦合会使代码在面对变化时变得不那么健壮) 不知道2D,但有一个完整的id软件3D游戏引擎。除了图形,这应该为您提供一个宝库。有关编写游戏的良好编码风格的想法,请参见《末日》(the Doom)。请参见Gamedev网站上有关God类的内容(是的,它们是一个坏主意,因为紧密耦合使代码在面对变化时不那么健壮) 不知道2D,但有一个完整的id软件3D游戏引擎。除了图形,这应该为您提供一个宝库。有关编写游戏的良好编码风格的想法,请参

在Gamedev网站上看到关于上帝类的内容(是的,这是个坏主意,因为紧密耦合会使代码在面对变化时变得不那么健壮)

不知道2D,但有一个完整的id软件3D游戏引擎。除了图形,这应该为您提供一个宝库。有关编写游戏的良好编码风格的想法,请参见《末日》(the Doom)。

请参见Gamedev网站上有关God类的内容(是的,它们是一个坏主意,因为紧密耦合使代码在面对变化时不那么健壮)


不知道2D,但有一个完整的id软件3D游戏引擎。除了图形,这应该为您提供一个宝库。有关编写游戏的良好编码风格的想法,请参见《末日》。您在设计上有问题吗,还是只是想仔细考虑一下?如果你不确定,有时候继续用你所拥有的编码并找出它的优点和缺点是个不错的主意。一路上你会学到很多东西,我只是不确定。我搜索了整个stack overflow,找到了几个关于“God”类的帖子(不幸的是,它们与游戏开发无关)。一、 我自己也不认为这是坏事,但我看到一些人说创建这样的课程不是一个好习惯。我同意@paddy。如果你以前从未做过这类事情,你确实会学到很多东西,在你对所写的感到满意之前,可能会有几次“失火”。关于你的最后一个问题,请尝试一下:如果你因为学术上的污名而避免使用有用的范例,你将花费所有的时间重构代码,并且永远不会完成你的项目。让它变得有点脏,让你的游戏变得有趣。你制作的下一个游戏将有更好的结构。接下来……谢谢你的回答!我只是不想养成坏习惯,这就是我为什么要问的原因。我会照你说的去做;当我完成开发后,我会在这里发表一篇关于我的经验的文章。你在设计上有问题吗,还是你只是想好好想想?如果你不确定,有时候继续用你所拥有的编码并找出它的优点和缺点是个不错的主意。一路上你会学到很多东西,我只是不确定。我搜索了整个stack overflow,找到了几个关于“God”类的帖子(不幸的是,它们与游戏开发无关)。一、 我自己也不认为这是坏事,但我看到一些人说创建这样的课程不是一个好习惯。我同意@paddy。如果你以前从未做过这类事情,你确实会学到很多东西,在你对所写的感到满意之前,可能会有几次“失火”。关于你的最后一个问题,请尝试一下:如果你因为学术上的污名而避免使用有用的范例,你将花费所有的时间重构代码,并且永远不会完成你的项目。让它变得有点脏,让你的游戏变得有趣。你制作的下一个游戏将有更好的结构。接下来……谢谢你的回答!我只是不想养成坏习惯,这就是我为什么要问的原因。我会照你说的去做;当我完成开发的时候,我会在这里写一篇关于我的经历的文章。一个有几个职责的类?如果是这样,一个包含整个游戏循环的类是否应该被视为上帝类?它还包含诸如Player、SplashScreen等对象,这些对象具有诸如“移动”之类的方法,但它们都在gameLoop方法内部调用。@Brukmoon是的,许多不相关的职责应该重构为单独的类别。这是一个小的编码例子,我认为什么是上帝类呢?一个有几个职责的类?如果是这样,一个包含整个游戏循环的类是否应该被视为上帝类?它还包含诸如Player、SplashScreen等对象,这些对象具有诸如“移动”之类的方法,但它们都在gameLoop方法内部调用。@Brukmoon是的,许多不相关的职责应该重构为单独的类别。请参见下面的小编码示例。