SDL纹理和CPU \内存问题

时间:2014-01-25 10:59:12

标签: c++ opengl sdl

我用SDL2.00和c ++开发了一款游戏。我似乎有内存和CPU问题。 CPU使用率高达40%,内存使用量每秒增加5mg。

所以我认为原因在于我处理Textures \ Sprites的方式。

我的问题是我应该为每个实例创建一个不同的/新的精灵/纹理吗?

例如,我有一个名为Enemy的类,其中包含与敌人怪物相关的所有变量和方法,如HP,伤害,位置,图像(纹理)等。此类包含要渲染到渲染器上的自己的纹理。

这是正确的方法吗?或者我应该事先为所有图像创建一个Sprite / Texture并根据需要渲染它们?

我想知道这是否会在渲染器上呈现两个不同的图像:

RenderCopy(renderer, image);
image->SetPosition(X,Y);
RenderCopy(renderer,image);

还是要将精灵移动到新位置?

我认为我的问题是因为我的渲染器重载和/或加载的纹理太多。

让我知道你的想法。

2 个答案:

答案 0 :(得分:1)

OpenGL不是场景图。这是一个绘图API。因此,每次分配新纹理时,您都会创建一个消耗内存的新数据对象。您应该尽可能重用和共享资源。

答案 1 :(得分:0)

  

我的问题是我应该为其创建一个不同的/新的精灵/纹理   每个实例?

不,除非精灵的每个实例都使用不同的纹理,否则你应该重复使用它们,即只加载它们一次并存储指向精灵使用的纹理的指针。

  

我想知道这是否会将两个不同的图像渲染到   渲染器:

RenderCopy(renderer, image); 
image->SetPosition(X,Y);
RenderCopy(renderer,image);
     

还是要将精灵移动到新位置?

这将复制图像两次。首先是旧位置,然后是新位置。你会得到一个尾随的图像。您应该清除以前的位置或在该位置渲染背景(或者应该存在的任何东西)。