2015-10-26 94 views
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; 
      } 
     } 

有什麼辦法解決這個問題?

在此先感謝。

回答

0

查看SDL_Renderer以利用硬件渲染。 SDL_UpdateWindowSurface使用軟件渲染,可能會非常緩慢。

+0

非常感謝。我會嘗試用SDL_Renderer和SDL_Texture類型重寫整個代碼 –