【发布时间】:2014-07-07 04:02:25
【问题描述】:
这是如何工作的?我很难找到有关对许多纹理使用相同加载的图像的教程/文档。
我一开始是使用Object obj("image.png"); 之类的东西,它将SDL_Texture 包装在一个对象中。调用 Object 的构造函数时,每次都会加载“image.png”。显然,如果您希望多个精灵使用相同的图像,这是一个糟糕的设计。它应该只需要加载一次。
所以我现在拥有的是一个 Sprite 类,它在其中包装了一个 SDL_Texture,如下所示:
struct Sprite {
SDL_Surface* sprite = NULL;
Sprite(const char* filename) {
sprite = IMG_Load(filename);
}
};
我还有一个Instance 类,它使用Sprite 来创建纹理:
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);
}
}
那么我在 main 中所做的就是将精灵加载到 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"));
...然后将它们加载到Instance 对象中。
Instance* i0 = new Instance(sprites[0], &theWindow);
Instance* i1 = new Instance(sprites[0], &theWindow);
但这会杀死程序。
我渲染它不是问题,它甚至没有进入渲染。当我调用new Instace() 时,它只会杀死程序。
我怀疑您不能将相同的SDL_Surface 加载到不同的SDL_Textures 中。那么我该如何做到这一点,以便我只需要加载某个精灵一次,然后我就可以为不同的纹理一遍又一遍地使用同一个精灵?
【问题讨论】: