我用SDL2.00和c ++开发了一款游戏。我似乎有内存和CPU问题。 CPU使用率高达40%,内存使用量每秒增加5mg。
所以我认为原因在于我处理Textures \ Sprites的方式。
我的问题是我应该为每个实例创建一个不同的/新的精灵/纹理吗?
例如,我有一个名为Enemy的类,其中包含与敌人怪物相关的所有变量和方法,如HP,伤害,位置,图像(纹理)等。此类包含要渲染到渲染器上的自己的纹理。
这是正确的方法吗?或者我应该事先为所有图像创建一个Sprite / Texture并根据需要渲染它们?
我想知道这是否会在渲染器上呈现两个不同的图像:
RenderCopy(renderer, image);
image->SetPosition(X,Y);
RenderCopy(renderer,image);
还是要将精灵移动到新位置?
我认为我的问题是因为我的渲染器重载和/或加载的纹理太多。
让我知道你的想法。
答案 0 :(得分:1)
OpenGL不是场景图。这是一个绘图API。因此,每次分配新纹理时,您都会创建一个消耗内存的新数据对象。您应该尽可能重用和共享资源。
答案 1 :(得分:0)
我的问题是我应该为其创建一个不同的/新的精灵/纹理 每个实例?
不,除非精灵的每个实例都使用不同的纹理,否则你应该重复使用它们,即只加载它们一次并存储指向精灵使用的纹理的指针。
我想知道这是否会将两个不同的图像渲染到 渲染器:
RenderCopy(renderer, image); image->SetPosition(X,Y); RenderCopy(renderer,image);
还是要将精灵移动到新位置?
这将复制图像两次。首先是旧位置,然后是新位置。你会得到一个尾随的图像。您应该清除以前的位置或在该位置渲染背景(或者应该存在的任何东西)。