2012-05-31 57 views
3

我最近開始使用SFML庫在C++上開發基於圖塊的遊戲。因爲我沒有很多C++和SFML的熟練程度,所以我覺得性能問題與我的代碼有關。C++ SFML的性能問題

的基本想法是,我已經和我創建動態地這樣瓷磚的二維數組:

Tile tiles**; 

tiles = new Tile*[sizeX]; 

for(int i = 0; i < sizeX; i++) 
    tiles[i] = new Tile[sizeY]; 

而且我畫的一切是這樣的:

for(int x = 0; x < sizeX; x++) 
{ 
    for(int y = 0; y < sizeY; y++) 
    { 
     tiles[x][y].Draw(app); 
    } 
} 

變量的應用程序是SF: :RenderWindow並傳遞給函數作爲參考。

當我繪製10x10地圖時,它運行在慢fps上。

對不起,我的英語不好!

在此先感謝!

+1

您可能想要考慮使用2D'std :: vector'來代替。一起工作要容易得多。爲了提高性能,創建基礎向量1D,並將其包裝在2D'Matrix'類中。 – chris

+0

如何繪製? – Pubby

+0

你是什麼意思? – UnTraDe

回答

3

您的性能問題可能與迭代2D數組無關。這可能是因爲Tile::Draw的性能,所以嘗試優化它。

但無論如何 - 正如@chris所說,使用一維矢量而不是二維數組可能會快一點。但是,這不應該使顯着的性能變化。

渲染瓦片貼圖的正確方法是創建一個大紋理,然後將貼圖渲染到該貼圖上,然後將這個大貼圖渲染到屏幕上,而不是像通常那樣渲染每個貼磚在XNA。

這是因爲SFML使用OpenGL的方式對大量的Draw()調用不友好。