实时更改纹理sdl

时间:2013-11-26 11:49:41

标签: c++ textures sdl game-engine render-to-texture

对不起,我对SDL和C ++开发有点新意。现在我已经创建了一个从map.txt文件中读取的tile mapper。到目前为止它可以工作,但我想现在添加编辑地图。

SDL_Texture *texture; 
texture= IMG_LoadTexture(G_Renderer,"assets/tile_1.png"); 
SDL_RenderCopy(G_Renderer, texture, NULL, &destination); 
SDL_RenderPresent(G_Renderer); 

以上是我展示瓷砖的基本方法,但是如果我想进入并实时更改纹理,那就是有点儿麻烦并且效果不好。有没有最适合编辑纹理的方法?感谢您的帮助,我感激不尽。

1 个答案:

答案 0 :(得分:1)

最基本的方法是设置一个存储容器,其中包含一些您将重复使用的纹理;例如矢量或字典/地图。例如,使用地图方法可以执行以下操作:

// remember to #include <map>
map<string, SDL_Texture> myTextures;
// assign using array-like notation:
myTextures["texture1"] = IMG_LoadTexture(G_Renderer,"assets/tile_1.png");
myTextures["texture2"] = IMG_LoadTexture(G_Renderer,"assets/tile_2.png");
myTextures["texture3"] = IMG_LoadTexture(G_Renderer,"assets/tile_3.png");
myTextures["texture4"] = IMG_LoadTexture(G_Renderer,"assets/tile_4.png");

然后使用不同的纹理,你所要做的就是使用以下内容:

SDL_RenderCopy(G_Renderer, myTextures["texture1"], NULL, &destination); 
SDL_RenderPresent(G_Renderer);

可以通过将第一行更改为

来进一步控制
SDL_RenderCopy(G_Renderer, myTextures[textureName], NULL, &destination); 

其中textureName是一个字符串变量,您可以在代码中实时更改。

这种方法意味着您可以加载之前需要的所有纹理,并在以后根据需要简单地使用它们,这意味着在渲染时文件系统无法加载:)

对地图here.

有一个很好的解释

希望这会让你在正确的方向上轻推一下。如果您需要更多信息,请告诉我们:)