C++ 在SDL2中加载同一图像的多个纹理
这是怎么回事?我很难找到关于对许多纹理使用相同加载图像的教程/文档 我最初做的是使用类似于C++ 在SDL2中加载同一图像的多个纹理,c++,sdl,sdl-2,C++,Sdl,Sdl 2,这是怎么回事?我很难找到关于对许多纹理使用相同加载图像的教程/文档 我最初做的是使用类似于objectobj(“image.png”),它将SDL\u纹理包装到对象中。调用对象的构造函数时,每次都会加载“image.png”。显然,如果您希望多个精灵使用同一图像,这是一个糟糕的设计。它应该只需要加载一次 因此,我现在有一个Sprite类,它将SDL_纹理封装在其中,如下所示: struct Sprite { SDL_Surface* sprite = NULL; Sprite(
objectobj(“image.png”)
,它将SDL\u纹理
包装到对象中。调用对象的构造函数时,每次都会加载“image.png”。显然,如果您希望多个精灵使用同一图像,这是一个糟糕的设计。它应该只需要加载一次
因此,我现在有一个Sprite
类,它将SDL_纹理
封装在其中,如下所示:
struct Sprite {
SDL_Surface* sprite = NULL;
Sprite(const char* filename) {
sprite = IMG_Load(filename);
}
};
我还有一个实例
类,它使用精灵
创建纹理:
struct Instance {
Sprite* sprite = NULL;
SDL_Texture* texture = NULL;
Instance(Sprite* spr, WindowWrapper* wr) {
texture = SDL_CreateTextureFromSurface(wr->renderer, sprite->sprite);
SDL_FreeSurface(sprite->sprite);
}
}
那么我主要做的就是将精灵加载到精灵对象中:
vector<Sprite*> sprites;
sprites.push_back(new Sprite("image1.png"));
sprites.push_back(new Sprite("image2.png"));
sprites.push_back(new Sprite("image3.png"));
但这扼杀了这个计划
我渲染它没有问题,它甚至没有到达渲染。当我调用new Instace()
时,它会终止程序
我怀疑您无法将相同的
SDL\u曲面
加载到不同的SDL\u纹理
。那么,我该如何使它只需加载一次特定的精灵,然后我就可以对不同的纹理反复使用相同的精灵?我想你需要更多的咖啡:)看看你的实例构造函数。它释放SDL_曲面。当然,在那之后你不能再使用它
SDL_FreeSurface调用应该移动到Sprite的析构函数。这样你就可以多次使用精灵了
Instance* i0 = new Instance(sprites[0], &theWindow);
Instance* i1 = new Instance(sprites[0], &theWindow);