我目前正在使用CodeBlocks在SDL中开发一款小游戏,看起来我在表面和纹理管理方面遇到了一些麻烦。我目前的进展是使用箭头键在屏幕上移动纹理。但是,我注意到在加载相对较大的图像时,FPS急剧下降,因此我在屏幕上移动的纹理移动得慢得多。 我的绘制函数如下所示:
const char* assets[5]={"assets/textures/0.tga","assets/textures/1.tga",
"assets/textures/2.tga","assets/textures/3.png","assets/textures/4.png"};
SDL_Surface* tex[5];
void DrawImage(int i, SDL_Surface* &dest, SDL_Rect &rect)
{
if(tex[i]==NULL) tex[i] = IMG_Load(assets[i]);
SDL_BlitSurface(tex[i], NULL, dest, &rect);
}
数组中的第四个纹理是大的。如果我发出以下任何一项:
DrawImage(0, screenSurface, rect);
DrawImage(1, screenSurface, rect);
DrawImage(2, screenSurface, rect);
DrawImage(4, screenSurface, rect);
一切顺利。但是,如果我发出:
DrawImage(3, screenSurface, rect);
并将纹理保持在窗口的边界,一切都以慢动作运行。将纹理移动到窗口的边界之外会使一切再次正常运行。 主循环看起来像这样:
bool running = true;
while(running)
{
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0, 0, 0));
DrawImage(3, screenSurface, rect);
MovePlayer(rect, state);
MoveCursor(NULL, NULL, screenSurface);
SDL_PumpEvents();
SDL_UpdateWindowSurface(window);
if (state[SDL_SCANCODE_ESCAPE])
{
SDL_DestroyWindow(window);
running = false;
}
}
有没有办法克服这个问题?
提前致谢。
答案 0 :(得分:0)
调查SDL_Renderer
以利用硬件渲染。 SDL_UpdateWindowSurface
使用软件渲染,速度很慢。