0
我目前在CodeBlocks中開發SDL中的小型遊戲,看起來我遇到了表面和紋理管理方面的一些麻煩。我目前的進度是使用箭頭鍵在屏幕上移動紋理。但是,我注意到當加載一個相對較大的圖像時,FPS急劇下降,因此我在屏幕上移動的紋理移動速度要慢很多。 我繪製函數如下:SDL在性能較差的情況下性能下降
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;
}
}
有什麼辦法解決這個問題?
在此先感謝。
非常感謝。我會嘗試用SDL_Renderer和SDL_Texture類型重寫整個代碼 –