C++ 可以为每个精灵设置SDL_曲面和SDL_纹理吗?

C++ 可以为每个精灵设置SDL_曲面和SDL_纹理吗?,c++,sdl-2,C++,Sdl 2,我正在尝试用cpp在SDL2中构建一个游戏引擎。我有一个叫做“实体”的类,它有一些运动数据,还有一些指向曲面和纹理的指针。函数“render”被称为inmass,以基于g_实体向量渲染每个精灵 class entity { ... SDL_Surface* image; SDL_Texture* texture; entity(const char* filename, SDL_Renderer * renderer, float size) {

我正在尝试用cpp在SDL2中构建一个游戏引擎。我有一个叫做“实体”的类,它有一些运动数据,还有一些指向曲面和纹理的指针。函数“render”被称为inmass,以基于g_实体向量渲染每个精灵

class entity {
    ...
    SDL_Surface* image;
    SDL_Texture* texture;

    entity(const char* filename, SDL_Renderer * renderer, float size) {
        image = IMG_Load(filename);
        width = image->w * size;
        height = image->h * size;
        texture = SDL_CreateTextureFromSurface(renderer, image);
        g_entities.push_back(this);
        
    }

    ~entity() {
        SDL_DestroyTexture(texture);
        SDL_FreeSurface(image);
        //TODO remove from g_entities
    }

    void render(SDL_Renderer * renderer) {
        SDL_Rect dstrect = { x, y, width, height };
        SDL_RenderCopy(renderer, texture, NULL, &dstrect);
    }
    ...
}
因此,该程序为每个精灵创建一个新的纹理和曲面。这样行吗?有没有更快的办法

如果是这样,我想在它变得更糟之前把它清理干净


我用96个精灵制作了一个testlevel,每个精灵都占据了屏幕的2%,透支量达数吨,英尺为15毫秒(~65帧),分辨率为1600x900,是的,但实际上不是。如果同一个精灵在不修改的情况下被多次使用,那么这些对象拥有指向同一SDL_纹理的指针是最有效的。此外,可以在生成纹理后释放图像。此外,在构造函数中加载这些可能是一个坏主意,因为动态生成的对象需要读取磁盘

我建立了一个系统,在这个系统中,实体在构造时被赋予另一个变量,如果它是正的,实体将检查并查看是否有任何其他实体将相同的文件用于它的sprite,如果是,就使用相同的引用

这意味着,通过在关卡中生成一个项目符号,可以有效地处理生成和销毁的项目符号等对象