だからここに私が見つけたものがあります。テクスチャをアルファ付きでレンダリングするには、テクスチャへSetTextureAlphaMod
のポインタと 0 ~ 255 の範囲の整数を渡す呼び出しを行うだけです。
関数自体はここに文書化されています
注意。アルファ変調はレンダラーで常にサポートされているわけではありません。その場合、関数は -1 を返します (呼び出しが成功した場合は 0 を返します)。関数のドキュメントには、レンダラーがアルファ変調をサポートしているかどうかを検出する方法に関する情報があります。
私の問題の次の部分は、SDL_TRANSPARENT (0) から SDL_OPAQUE (255) へのスムーズなフェードを実行する方法でした。私は変数更新機能でこれを行いました(ゲームは固定および変数更新を使用しています)
#define FADE_SPEED 0.07f;
void SomeClass::UpdateVariable(float elapsedTime)
{
// Check there is a texture
if (texture) {
// Set the alpha of the texture
SDL_SetTextureAlphaMod(texture, alpha);
}
// Update the alpha value
if (alpha < SDL_ALPHA_OPAQUE) {
alphaCalc += FADE_SPEED * elapsedTime;
alpha = alphaCalc;
}
// if alpha is above 255 clamp it
if (alpha >= SDL_ALPHA_OPAQUE) {
alpha = SDL_ALPHA_OPAQUE;
alphaCalc = (float)SDL_ALPHA_OPAQUE;
}
}
2 つのアルファ変数の使用に注意してください。alpha
テクスチャ アルファを制御する関数に渡される実際の値であり、Uint8 です。float であり、0 から 255 まで徐々に増加する値を格納するために使用されます。更新関数の呼び出しごとに、経過したフレーム時間で乗算さalphaCalc
れたスケーラー値によってこの値が更新されます。FADE_SPEED
次に、実際のアルファ値に割り当てられます。これは、整数の丸めによってアルファ値のみを使用したスムーズなフェードが妨げられるため、スムーズなフェードを維持するために行われます。