我正在使用OpenGL和C ++制作的小型游戏引擎中制作小型游戏。我在游戏中使用了一个称为ResourceManager的静态类,该类负责加载和返回纹理,着色器,音频等。它是静态的,因此我可以在任何类(如播放器)中获取纹理,着色器,音频等,而无需初始化它和评估它非常容易。但是,如果我想为不同的级别使用不同的纹理和音频,该怎么办,我必须将先前加载的所有纹理和声音都带到下一个级别,并继续添加它们。我认为这不是一个好习惯。我应该为该级别加载所需的纹理和音频,并在进入下一个级别时删除所有纹理和音频,并为该级别加载新的纹理和音频。这将使我的记忆很小。但是我不能使用静态类来做到这一点,因为它们没有构造函数析构函数。
我应该使用非静态类来处理不同级别的资源。
我很困惑。请告诉我我该怎么做,我做错了什么,以及游戏开发者如何解决该问题。
对不起,英语很差。感谢您的阅读。
Singleton pattern似乎适合您想要实现的目标。
它具有普通类的灵活性,但是可以轻松地访问您建议的纯静态类。
我不是游戏开发者,所以我不知道任何专门针对游戏的常见做法,但是我会做的。
std::vector<MyTextures>
或自定义类型,其中包含特定级别所需的所有资源/资产。initialize
或setup
中)时,将资源(使用步骤1的管道)加载到缓存中功能)。此设计的优点是(如果实施正确)一旦不再需要,资源就会自动卸载。例如,如果您完成一个关卡,那么您也将销毁关卡对象,并且由于资源缓存是关卡对象的一部分,这些资源也将被销毁(同样,如果正确实现了)。