我在 SDL 中的一个小型引擎/游戏上使用 C++ 工作,我试图找到组织和维护所有对象将使用的纹理/资源的最佳方法。
我有一个名为 RenderedObject 的简单基类,屏幕上显示的任何内容都继承自它。任何渲染的对象都会有多个纹理和与之关联的 SDL_surfaces,它将拼凑在一起进行渲染。
(例如,从 RenderedObject 继承的角色对象可能具有腿部、身体和头部的表面/纹理)
RenderedObject 的不同子级将具有与每个类关联的不同纹理。
由于这些类将有多个实例,显然我只需要加载/维护其纹理的一个副本,然后每个实例都可以有一个指向它的指针。
我想知道哪种方式会更好:
1)我有一个图形管理器来完成所有的图像加载和渲染,所以我想我可以用它来为每个对象保留一个所有纹理的数组。但我不确定如何从每个 RenderedObject 实例链接回它。
理想情况下,我只想给每个实例一个指针,然后能够在构造函数中调用类似以下的东西:
this->textures = graphicManager.getTextures(this);
然后graphicManager 可以返回某种包含该对象所有纹理的Texture 对象。
如果我这样做,我不确定 Id 是如何做到的,所以我可以直接传递对象指针并让图形管理器发回正确的信息,而不是使用 Id 必须为每个子类指定的某种枚举或字符串渲染对象。
2)我认为可能可行的另一种方法是让所有纹理都是对象的静态成员。我只是不太熟悉使用静态变量。他们的值什么时候被初始化?因为在完成任何纹理加载之前需要加载/初始化 SDL
无论如何,总而言之,我真的只是在寻找最好的方法来在 RenderedObject 的每个子类中保留某种指针或引用到它的纹理,而无需为每个子类创建一堆枚举或附加类。