c - 使用 C 中的 SDL 2.0,如何使矩形淡入淡出?

标签 c sdl

我正在制作一个小型 2D 游戏,我试图让一个矩形从透明(白色)渐变到它的原始颜色,然后再次变回白色,然后继续从白色到它的颜色并返回。例如:

白色 -> 淡化为红色 -> 红色 -> 淡化为白色 -> 重复...

我制作了我的矩形:

SDL_Rect rect;

然后我设置颜色并将矩形绘制到屏幕上(在设置它的 x 和 y 位置和大小之后):

SDL_SetRenderDrawColor(renderer, 255, 51, 0, 255);
SDL_RenderFillRect(renderer, &rect);

但是我不知道最后一个参数是什么(alpha)。在 wiki 中,SetRenderDrawColor 的文档是:

int SDL_SetRenderDrawColor(SDL_Renderer* renderer,
                       Uint8         r,
                       Uint8         g,
                       Uint8         b,
                       Uint8         a)

其中“a”是 alpha 值(r、g、b 是红色、绿色、蓝色)。这是什么让我改变颜色的不透明度?如果我有一个循环并且每一帧我只有一个在 0 到 255 之间变化的变量并使“alpha”值允许我改变透明度并使矩形颜色“脉冲”?我该怎么做?

我必须让我的矩形成为纹理吗?有没有办法为我打开此功能以更改 alpha 值?

编辑:我意识到我没有在循环中使用 RenderClear!这解决了问题。

最佳答案

您需要调整 alpha 值。 Alpha 代表透明度。最大值意味着它是不透明的(根本不透明),最小值为零意味着它是完全透明的(根本不可见)。在本例中,255 表示它不透明。如果你将它设置为 128,那么它将是 50% 的透明度。要淡入淡出,请调整 alpha 值。

关于c - 使用 C 中的 SDL 2.0,如何使矩形淡入淡出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48200230/

相关文章:

c# - 使用 CLR C++ 包装器从 C# 应用程序在 C++ 中加载 SDL 窗口不起作用

c - waitpid 的返回值

c - 我如何检测目录何时使用 inotify 挂载?

c - 如何读取文件中的所有行并将它们存储在字符串中

c++ - SDL_RenderCopy 没有做任何事情

c++ - 在 Mac OS X .framework 中包含 GLEW 的正确方法是什么?

c++ - 调节 SDL Sprite 速度 C++

c - 打印类型定义

c++ - Arduino有平台宏吗?

c++ - 如何在SDL(C++)中绘制正在进行的图像计算?