1

私は透明なSDL_Surfaceを取得しようとしています(半透明の長方形をブリットするため)、これが私がやったことです:

surface := SDL_CreateRGBSurface(SDL_SWSURFACE, XMAX*TILE_SIZE,
YMAX*TILE_SIZE, BPP, 0, 0, 0, SDL_ALPHA_TRANSPARENT);
SDL_FillRect(surface, nil, SDL_MapRGBA(surface^.format, 0, 0, 0, 0));

これはまだ機能しません。得られる表面は透明ではなく黒です。何か案が?

ボーナス:複数の半透明の長方形が重なり合うのを避けるために、これらの長方形を削除してから新しい長方形をブリットする方法はありますか?

4

1 に答える 1

0

SDL_CreateRGBSurfaceのドキュメントを見ると、に置き換える必要があるSDL_SWSURFACEと思いますSDL_SRCALPHA

ボーナス部分については、最初にハードウェアアクセラレーションを機能させることを試みるかもしれません...しかし、それがオプションではなく、ある程度のメモリを費やしても構わないと思っている場合:

  • まず、長方形を描く前に、その下のピクセルのコピーを作成します。

  • 一番上の長方形を消去するには、保存されている背景画像を再度ブリットします。

  • 他の長方形を消去するには、背景を再ブライトしてから、その上にある長方形の重なり合う部分を後ろから前に再描画します。

于 2012-05-04T17:50:48.680 に答える