希望する結果を得る最も簡単な方法は、キャラクター スプライトを含むサーフェスをロードすることから始めてsource
、ゴーストのインスタンスごとworking
にサーフェスのコピーを作成することだと思います。あなたがしたいことは、インスタンスのアルファ値が変更されるたびに、SDL_BlitSurface
(doc)あなたのコピーsource
にあなたworking
を適用し、次に透明度を適用し(おそらく0と1の間の浮動小数点数として保持する必要があります)、次に透明度を適用しますすべてのピクセルのアルファ チャネル。
source
32 ビット サーフェスの場合、最初に をロードして割り当てたと仮定すると、working
SDL_Surface
おそらく次の行に沿って何かを実行できます。
SDL_BlitSurface(source, NULL, working, NULL);
if(SDL_MUSTLOCK(working))
{
if(SDL_LockSurface(working) < 0)
{
return -1;
}
}
Uint8 * pixels = (Uint8 *)working->pixels;
pitch_padding = (working->pitch - (4 * working->w));
pixels += 3; // Big Endian will have an offset of 0, otherwise it's 3 (R, G and B)
for(unsigned int row = 0; row < working->h; ++row)
{
for(unsigned int col = 0; col < working->w; ++col)
{
*pixels = (Uint8)(*pixels * character_transparency); // Could be optimized but probably not worth it
pixels += 4;
}
pixels += pitch_padding;
}
if(SDL_MUSTLOCK(working))
{
SDL_UnlockSurface(working);
}
このコードはSDL_gfx
( here ) から着想を得たものですが、それだけを行っているのであれば、そのためだけにライブラリにリンクする必要はありません。