まず、画像が「PNG」などの小さなファイル形式であることを確認してください。次に、画像をブリットするときは、背景画像に透明色を追加していないことを確認してください。これは無意味であり、多くの CPU サイクルを占有します。これは、画像読み込みのラッパーとしてずっと前に書いたコードの例です
SDL_Surface* altSDL::load_image(std::string filename)
{
SDL_Surface* loadedImage = NULL;
SDL_Surface* optimizedImage = NULL;
loadedImage = IMG_Load( filename.c_str() );
if( loadedImage != NULL )
{
optimizedImage = SDL_DisplayFormat( loadedImage );
SDL_FreeSurface( loadedImage );
}
else
{
Failure* fail;
fail = Failure::getInstance();
fail->failLog(filename);
}
if( optimizedImage != NULL )
{
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0xFF, 0, 0xFF );
SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
}
return optimizedImage;
}
このコードでは、すべての画像をこれに渡して非常にシームレスに最適化することができますが、背景/大きな画像の場合、コードのこの最後のブロックが次の行に沿って何かに変更されていることを確認する必要がありますこのようなもの:
//Added some Sudo code
if( loadedImage != NULL && !isBigImage)
{
optimizedImage = SDL_DisplayFormat( loadedImage );
SDL_FreeSurface( loadedImage );
}
else if(!isBigImage)
{
Failure* fail;
fail = Failure::getInstance();
fail->failLog(filename);
}
isBigImage は、追加した sudo コードであり、渡されたパラメーターです。これにより、すべての画像が最適化され、小さくなり(pngファイルであることを確認する必要があります)、透明度が小さな画像ファイルにのみ追加されるようになり、背景がfpsを解決しません