我正在通过使用 SFML 和 OpenGL 制作一个小游戏来练习我的新手 C++ 技能。编程部分大部分都进行得很好,但我对实际代码/类设计有疑问。
我有一个类 MainLoop,它包含游戏循环并拥有以下每个类的一个实例:事件、图形、命令、游戏和 UI。我最初希望所有这些都是一个类(函数在不同的 .cpp 文件中分隔),但被告知这是 OOP/C++ 的错误方法。然而,虽然我可以看到分离它们的好处(封装、模块化、调试),但我似乎也遇到了很多不好的事情。让我以用户按下 UI 按钮为例。
首先,MainLoop 从 SFML 的窗口类中获取事件。MainLoop 将它发送到我自己的 Event 类,它解释事件并将其发送到 UI 类以检查它是否“点击”任何按钮。如果为真,则 UI 类将其发送到解释按钮命令的 Command 类。然后,最后,命令类将其发送到 Game 类或它需要去的任何其他地方。
对我来说,这一切似乎都非常沉重,而且至少按照我目前的做法,需要大量的前向声明(在我了解这些之前,我最终得到了大量的循环依赖) . 我怀疑它对性能也有多大好处。
无论如何,这里有什么我错过的技巧吗?这些类应该如何连接,它们应该如何通信?我应该如何将命令从 Event 类转发到 UI 类?我真的应该在任何地方都有前向声明、包含和东西,这不会破坏模块化吗?我是否应该让它全部通过 MainLoop 类并使用不需要声明的整数/浮点数/字符转发返回?我在这里有点不知所措。