2010-09-13 72 views
1

我目前正在研究具有可破壞地形的SDL遊戲。目前地形是一個大的(5000 * 500,用於測試)隨機生成的位圖。SDL:簡單位圖的FPS問題

清除主表面的每一幀,並將地形位圖傳送到其中。目前的分辨率是1200 * 700,所以當我測試1200 * 500像素時,大多數點都是可見的。

現在的問題是:FPS已經下降了!我認爲一個簡單的位圖不應該顯示任何效果 - 但我已經下降到〜24 FPS這個!

  • 爲什麼blitting &繪製一個這麼大的速度太慢的位圖?
  • 我在可破壞的地形上採取了錯誤的做法嗎?

  • 蠕蟲這樣的遊戲如何做到這一點?在FPS似乎非常高,雖然確實有在那裏

+0

X11,OSX或Win32/64? SDL 1.2或1.3? – genpfault 2010-09-14 14:28:37

回答

0

繪製每當你初始化一個表面上的許多像素,這樣做的方式如下:

SDL_Surface* mySurface; 
SDL_Surface* tempSurface; 
tempSurface = SDL_LoadIMG("./path/to/image/image.jpg_or_whatever"); 
/* SDL_LoadIMG() is correct name? Not sure now, I`m at work, so I can`t verify it. */ 
mySurface = SDL_DisplayFormat(tempSurface); 
SDL_FreeSurface(tempSurface); 

的SDL_DisplayFormat()方法轉換的像素格式您的表面到視頻表面使用的格式。如果你不按照我上面描述的方式來做,SDL每次表面都是這樣做的。

永遠不要忘記:只需將遊戲中真正可見的必要部件擊倒即可。

這是我第一次猜測,爲什麼你有性能問題。發佈你的代碼或者詢問更具體的問題,如果你想要更多tipps。祝你好運。

0

如果你在每一幀重繪整個屏幕,你的總是會得到一個糟糕的FPS。您必須重繪僅改變了部分屏幕。您也可以嘗試使用SDL_HWSURFACE來使用硬件,但它不適用於每個圖形卡。

0

2D在SDL是相當緩慢的,有沒有什麼可以做,使之更快您的選項(在Windows上至少它使用GDI由默認圖形。):

  1. 轉到OpenGL和開始使用紋理四邊形的精靈。
  2. 嘗試SFML。它提供了一個硬件加速的2d環境。
  3. 使用SDL 1.3獲取源快照,它不穩定,仍在開發中,但硬件加速2d應該是主要賣點之一。