2011-10-08 98 views
2

我使用SFML,我無法找到該庫是如何工作的,我有性能問題的任何解釋。 我正在試圖製作一個由50x50的瓦片組成的瓦片地圖,每個瓦片的寬度都是20x20像素。 1)每個tile是一個sf :: sprite,其圖形圖像只是一個大圖像(我的tileset),我在其上設置了一個20x20的子矩形。 2)我只是循環遍歷整個圖塊的數量,並使用AppDraw(Map [i] [j]);繪製每個瓷磚,我使用「查看」對象,所以我可以移動視圖瓷磚發動機性能問題

現在我有一個非常低的FPS(1圖像/秒),我想知道兩件事情相對於以前的點。 1)每個sf :: sprite是否需要時間來繪製,因爲它們的圖像來自裁剪的巨大圖像? 2)我是否有權循環使用整套瓷磚,即使是我沒有看到的瓷磚。我假設的視圖對象使得,使得在視線瓷磚沒有白費

感謝

+1

向我們展示如何使您的地圖,(張貼一些代碼),這不應該發生。另外,您是否在每次迭代或程序開始時都裁剪拼圖? –

+0

我簡單地做: \t \t的for(int i = 0; I lezebulon

+0

即使使用20 20瓦(這還沒有填滿屏幕),我得到20 FPS,而滾動,這看起來太低 – lezebulon

回答

2

這通常被認爲是錯誤的方式來呈現瓷磚地圖在重新計算。

更正確的方法是在這種情況下創建一個較大的紋理或sf::Image,然後將紋理貼圖渲染到該紋理上,然後將這個大紋理渲染到屏幕上。有些情況下這種方法不可行,但在大多數情況下,情況會好得多。

這樣,你只加載小塊映射時呈現每個瓦片一次,然後你只需要一次渲染大紋理的每一幀,而不是渲染2500個單獨區塊的每一幀。

SFML使用OpenGL的方式對大量的Draw()調用不友好,所以它有助於找到儘可能少的調用方法。

+0

還應該指出的是,SFML 2將優化這一點。也許它已經被實際實現了,自從我在SFML中使用tile引擎以來已經有一段時間了。 –