我一直在研究如何做这个简单的效果。我有一个图像(见下文),当这个图像用于游戏时,它会产生顺时针过渡到黑色效果。我一直在尝试在SDL(2)中重现这种效果,但无济于事。我知道它与屏蔽有关,但我不知道如何在代码中做到这一点。
我能得到的最接近的是使用“SDL_SetColorKey”并递增RGB值,以便不绘制动画的“擦除”部分。
Uint32 colorkey = SDL_MapRGBA(blitSurf->format,
0xFF - counter,
0xFF - counter,
0xFF - counter,
0
);
SDL_SetColorKey(blitSurf, SDL_TRUE, colorkey);
// Yes, I'm turning the surface into a texture every frame!
SDL_DestroyTexture(streamTexture);
streamTexture = SDL_CreateTextureFromSurface(RENDERER, blitSurf);
SDL_RenderCopy(RENDERER, streamTexture, NULL, NULL);
我已经搜遍了所有人,现在我只是急切地想要回答我自己的好奇心和理智!我想这个问题并不完全具体到SDL;我只需要知道怎么想这个!
答案 0 :(得分:0)
任意想出一个解决方案。它很贵,但很有效。通过遍历图像中的每个像素并映射颜色,如下所示:
int tempAlpha = (int)alpha + (speed * 5) - (int)color;
int tempColor = (int)color - speed;
*pixel = SDL_MapRGBA(fmt,
(Uint8)tempColor,
(Uint8)tempColor,
(Uint8)tempColor,
(Uint8)tempAlpha
);
其中alpha是像素的当前alpha,speed是动画的参数化速度,color是像素的当前颜色。 fmt是图像的SDL_PixelFormat。这是为了淡化为黑色,以下是从黑色淡入:
if ((255 - counter) > origColor)
continue;
int tempAlpha = alpha - speed*5;
*pixel = SDL_MapRGBA(fmt,
(Uint8)0,
(Uint8)0,
(Uint8)0,
(Uint8)tempAlpha
);
其中origColor是原始灰度图像中像素的颜色。
我制作了一个快速API来完成所有这些操作,因此请随时查看:https://github.com/Slynchy/SDL-AlphaMaskWipes