Во-первых, убедитесь, что изображение имеет формат небольшого типа файла, например «PNG». Во-вторых, при переносе изображения убедитесь, что вы не добавляете цвет прозрачности к фоновому изображению, так как это бессмысленно и требует МНОГО циклов процессора. Вот пример кода, который я написал давным-давно в качестве оболочки для загрузки изображений.
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
person
DeathB4Allegiance
schedule
29.07.2015