2013-11-26 53 views
1

对不起,我对SDL和C++开发有点新了。现在我已经创建了一个从我的map.txt文件读取的tile贴图器。到目前为止它工作,但我想现在添加编辑地图。实时更改纹理sdl

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

以上是我展示我的瓷砖的基本方式,但如果我想去和改变纹理实时它是一种越野车,并不能很好地工作。有没有最适合编辑纹理的方法?感谢您的帮助,我欣赏一切。

回答

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.的一个很好的解释

希望这会给你一个正确的方向推动。让我知道如果你需要更多的信息:)