gpt4 book ai didi

C++ SDL2 如何为单个图 block 着色

转载 作者:行者123 更新时间:2023-11-30 05:13:45 28 4
gpt4 key购买 nike

我正在通过编写经典的roguelike 来学习 C++ 和 SDL2。现在我通过渲染 tiles.png 图像的一部分来构建 map ,如下所示:

tiles

我关注了lazyfoo's tiling tutorial它有效,但我希望能够更改每个图 block 的背景和前景色。我可以通过类似 this other tutorial 的方式更改完整的纹理颜色,但是如果我想在某个地方有一扇棕色的门,在其他地方有一扇灰色的门怎么办?

最好的方法是什么?显然我不能将数百种颜色组合存储在 png 中。我应该为每个图 block 创建一个纹理,还是有更好的方法?

谢谢! :)

最佳答案

SDL-2 意味着您使用 opengl 来渲染图 block 。使用混合和着色 Material 。使用 SDL_SetRenderDrawColorSDL_SetRenderDrawBlendModeSDL_SetTextureBlendMode SDL_SetTextureColorModSDL_SetTextureAlphaMod。例如绘制黄色字母:

SDL_SetTextureColorMod(renderer, 255, 255, 0);

要绘制不同的背景,您需要使用带 alpha channel 的字母。首先,您需要在出现文本的位置绘制背景,然后绘制文本本身。例如:

//load surface with alpha-channel here
SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background
//draw rect for background here
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
//draw text here

或者 cheeting 版本(如果你不想使用 alpha 混合):

SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background
//draw rect for background here
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD);
//draw text here

关于C++ SDL2 如何为单个图 block 着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com