2012-01-18 86 views
3

鋪磚系統我有點難倒在Android遊戲,我發展,所以也許有人能幫助我。不要打擾建議AndEngine;我自己做到了這一點,如果可能的話,我寧願繼續沿着這條道路前進。實現在Android中

我工作的遊戲是一個簡單的平臺遊戲。最初這些級別被加載爲大量的位圖,但是一些內存不足的錯誤使得我必須提出一個更高效的系統。現在我將.tmx文件解析爲二維數組,並使用一種方法創建比設備屏幕略大的位圖,並用適當的圖塊填充該位圖。

的問題是,訪問該二維數組1500倍(16×16用磚)是非常昂貴的,我無法找出一個辦法不這樣做這麼多。目前我每次通過16個像素都必須重新繪製圖像。目前的想法包括使用更大的圖塊(更小的數組,儘管還限制了圖層大小),嘗試移動位圖的內容並僅加載要顯示的新行,或者使用更大的位圖以便新圖像不需要經常加載。有什麼建議麼?

回答

0

我開發這個項目,我們需要從網絡上下載圖像的瓷磚,並顯示它們作爲一個整體形象。事情是一個隨機滾動最終會崩潰整個應用程序,因爲虛擬機會拋出一個OutOfMemory異常。所以我使用TwoDScrollView和MxN ImageViews開發了一個視圖,它只下載了用戶視圖中的那些視圖。當用戶滾動時,我們維護一個緩存並開始分配距觀看區域「很遠」的圖像。速度較慢,但​​停止崩潰。

我將不能夠分享我的部分代碼。但是這裏有一個使用相同方法的Github倉庫。好運:)

我不能爲他們提供擔保,但here's a project特別適合您的需求

2

除非已經完成或無法;考慮從前景分離背景。
如果你使用一個簡單的背景(認爲超級馬里奧普通的藍色背景),那麼你可以最有可能重用這些瓷磚/該位圖/顏色/梯度比前景元素更長的時間。
這也會讓你的數組包含很多沒有前景存在的空白空間,這意味着你可以摺疊數組並只存儲包含切片的部分。摺疊陣列的缺點是必須存儲瓦片的高度屬性以知道它們應該去的位置。
(A背景從前景分離還得到的視差效應的可能性(在不同的速度比前景)背景中的移動)

的這種調整如何改變查找一個例子:
考慮遊戲正在運行在橫向模式下的480x800屏幕上。
這意味着要查找50 * 30(1500)的瓷磚。
每個貼片都保存在2d陣列中。 目前的可視面積看起來是這樣的:

  • 接地面積,4個箱體高。
  • 一個平臺,高5瓦,寬20瓦,地上。
  • 另一個平臺3瓦高,5瓦寬,也高於地面。
  • 從地面延伸到屏幕頂部的牆,5瓦寬。

去除背景磚和摺疊陣列,我們只需要擡頭看瓷磚: 地磚:50個* 4
PLATFORM1瓷磚:5個* 20
PLATFORM2瓷磚:3個* 5個
牆磚:26 * 5
總查找: 50 * 4 + 5 * 20 + 3 * 5 + 26×5 = 445小於原來的1500
現在三分之一,當然有一些額外的工作要弄清楚每個瓷磚的位置並繪製背景,但假設其中有一個非常優化的情況s花費的時間與查找相比,花費的時間還少於1000次查找。

當然,這只是解決問題的方法之一。

還記得像2d陣列比'扁平'陣列慢得多的小事情。如果您不能將數據放入1d數組中,請儘量減少嵌套的調用,例如得到一個行或列的時間和執行從該陣列的查找切換到下一個前:

//Really bad: 
for(int x=0; x<array.length; x++){ 
    for(int y=0; y<array[x].length; y++){ 
     Object o = array[x][y]; 
    } 
} 
//Better (can be made even better by using the for(Object o : array)-syntax): 
for(int x=0; x<array.length; x++){ 
    Object[] yArray = array[x]; 
    for(int y=0; y<yArray.length; y++){ 
     Object o = yArray[y]; 
    } 
} 
+0

我其實是有背景和前景分開,但數組不以任何方式坍塌所以還是導致檢查1500個數組條目。許多被發現是空的,沒有繪製瓦片,但正如你所說,它看起來像二維數組訪問速度很慢。我正在使用Tiled,它在.tmx文件中輸出,以及我爲Android創建的.tmx解析器,它創建了2d數組,並且包含從中創建位圖的痛苦緩慢方法。 – 2012-01-18 11:53:26

+0

您可以自己重新創建2d數組,以使其成爲1d數組,或以其他方式對其進行修改。此外,應該不需要一直創建一個大的位圖,而只需爲每個圖塊繪製位圖。 – Jave 2012-01-18 12:45:25

+0

不會將每個圖塊繪製爲單獨的位圖會導致垃圾收集器的大量開銷?我聽說它不是太快 – 2012-01-18 16:00:56