SDL_Surfaceをクリアして別のSDL_Surfaceに置き換えるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1604268

  •  05-07-2019
  •  | 
  •  

質問

しばらくオンラインでこれを見つけようとしているのを見た。

SDL_Surfaceにコンテンツが含まれています(あるテキストでは、別のコンテンツではスプライトの一部です)。ゲームループ内で、データを画面に表示します。しかし、それから再びループし、古いデータを置き換えず、単に上書きします。したがって、テキストの場合、それは混乱になります。

SDL_FreeSurfaceを試しましたが、うまくいきませんでした。別の方法を知っている人はいますか?

fpsStream.str("");
fpsStream << fps.get_ticks();
fpsString = fpsStream.str();

game.fpsSurface = TTF_RenderText_Solid(game.fpsFont, fpsString.c_str(), textColor);
game.BlitSurface(0, 0, game.fpsSurface, game.screen);
役に立ちましたか?

解決

次のようなものを試してください: SDL_FillRect(screen、NULL、0x000000);
ループの始めに。

他のヒント

透明なもの(SDL_ttfなど)を描画する場合、テキスト間の透明な領域は変更されません。つまり、以前の書き込みは残ります。通常、プログラムはフレームバッファをクリアし、フレームごとにシーン全体を再描画するため、これは問題になりません。昔は、画面の「汚れた」部分だけを再描画するのが一般的でしたが、今ではあまり一般的ではありません。

通常は、セカンダリサーフェス(つまり、画面ではないメモリ内のサーフェス)に描画し、画面にコピーする準備ができたら SDL_BlitSurface を描画します。その後、次の反復でセカンダリバッファー全体を( SDL_FillRect を使用して)クリアし、表面全体を失いたくなくて長方形のみを変更したい場合は、すべてまたは一部のみを再描画できます。

このようにして、ダブルバッファリングを取得し、ちらつきを防ぎます。また、ブリット後の SDL_UpdateRects も忘れないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top