在C++游戏中使用资源管理器的singleton
Using singleton for Resource Manager in C++ game
我已经和我的公司一起开发游戏好几年了。然而,最近我们一直在改进游戏的基础系统,以使未来的添加更容易。我们所做的一个更改是添加资源管理器,而不是手动加载屏幕类中的信息,这些信息本质上是游戏状态。我们决定将其实现为单例。然而,我知道在编程社区中使用单身汉的争议。下面我将举一个如何使用字体管理器的例子。我想知道在这种情况下,单例是否可以接受,或者你是否会推荐其他方法。
mTextToBeDrawn.setFont(FontManager::GetInstance()->GetFont("Default"));
我对所有建议都持开放态度,我将解释当前OOP设计,以便更深入地了解该系统。每个Manager都是从一个名为Manager的基类扩展而来的,该基类具有通用的添加和删除方法。然后在派生类中实现Add和Remove方法。这些类只需要一个实例,因为游戏只需要一种状态管理器、字体管理器等等。因此,我应该使用singleton还是应该使用另一种方法来创建更好的代码。
在编程社区中,我们经常听到"使用X是坏的"或"使用X很好",但仅仅将某个东西标记为坏或好根本不能解释它的长处和短处,也不能解释某个东西是如何出现问题的,也不能说明如何正确使用它。如果你不明白为什么有些东西可能不好,那么当它以其他形式或以不同的名字出现时,你很可能不会注意到它。
在你的单身汉例子中,我会做一些研究来确定使用单身汉的批评和陷阱,并评估它们是否会给你带来问题。
我最关心的两个问题是:
-
辛格尔顿介绍了全球数据和全球状态。
有了全局数据,访问和修改可能会发生在整个代码中,这使得错误很难追踪,而且更容易陷入混乱状态。单身汉往往是糟糕设计的结果。
-
单身汉通常不安全。
在某些应用程序中,陷阱并不会真正成为问题。在Cocoa/Objective-C世界里,苹果偶尔会使用Singleton来解决问题,在我看来,这些问题完全适合这份工作。它们的一些用法与您所描述的类似,例如图像管理/缓存。
你可以在这里阅读更多单身汉有什么不好的?
- 如何维护资源管理器项目视图中当前可见的项目列表
- 编译器资源管理器和 GCC 具有不同的输出
- Windows 资源管理器中的图标在使用 resource.rc 时显示 2 个不同的图标
- 编译器资源管理器(godbolt)如何安全地运行代码?
- 从 GUI 文件资源管理器执行程序,并且不生成终端
- Visual Studio 测试资源管理器找不到我的提升测试
- 通过文件资源管理器获取文件夹目录
- Windows 资源管理器打开文件夹还原
- 如何使用C 浏览目录以创建文件资源管理器
- C++ Android 资源管理器从应用内部目录中读取文件
- 停止SetVolumeMountPoint打开文件资源管理器
- 重新启动资源管理器.exe使用 C++
- 资源管理器
- Visual Studio,在(解决方案资源管理器的)某个筛选器内的所有文件中查找/替换文本
- SHOpenFolder并选择资源管理器更换程序的项目
- 如何在 Windows 资源管理器中捕获用户的左键单击?
- 如何将设备隐藏在资源管理器中
- 资源管理器在 TILE 视图模式下不显示 shell 命名空间扩展的项目详细信息
- 模板中的错误可能是错误的设计资源管理器
- 在C++游戏中使用资源管理器的singleton