2013-03-26 63 views
0

我有一個很大的形狀,當一個角色移動時這個巨型地圖會被移動(角色總是停留在舞臺中央)。將巨大形狀切割成瓷磚的最佳方法?

現在,由於地圖非常龐大,我想將地圖剪切成只在舞臺區域內時纔會發黑的圖塊。

我的問題是,如果有一種巧妙的方法將地圖切割成相同尺寸的較小瓷磚,或者我需要自己選擇每個瓷磚嗎?

形狀/貼圖位於符號內。事情是,地圖太大,無法生成動畫,所以爲了提高性能,我只想顯示當前位於x = 0和x = 780之間的瓦片,以及y = 0和y = 400之間的瓦片。

在此先感謝。

回答

2

優先級#1絕對不會爲屏幕外的內容創建圖形對象。爲了遊戲目的創建所有數據和所有內容,但不要將每個圖塊與圖形對象關聯。只需創建足夠的圖形對象來表示任何特定時刻的屏幕顯示內容,並將它們與開始時屏幕上顯示的內容相關聯;那麼當玩家移動時,只需更改那些圖形對象所關聯的遊戲拼圖。這樣可以避免你的內存耗盡,並且可以很快完成其他任務。

您似乎暗示遊戲玩法地圖在邏輯上被劃分爲瓦片。在這種情況下,你可以做這樣的事情:

var x:int = 0; 
var y:int = 0; 

for (var i:int = firstColumnInFocus; i < firstColumnInFocus + widthRange - 1; i++) 
{ 
    for (var j:int = firstRowInFocus; j < firstRowInFocus + heightRange - 1; j++) 
    { 
     tileGraphics[x][y].tile = level.tiles[i][j]; 
     y++; 
    } 
    x++; 
} 

至於在實際的遊戲數據結構創建邏輯瓷磚和東西推移,只需創建瓷磚或空間物體的二維數組,有什麼你需要他們,並確保數組中元素的位置代表其地理位置。

我不完全確定,但這是不是你正在談論的。在某些方面,這聽起來像是你正在討論的是一個已經被設計爲一個tile集合的關卡,​​而在其他方面,這聽起來像你正在談論的是採用單個sprite並且簡單地使用tile來近似多少它應該在屏幕上。我個人覺得你在做或多或少的一些事情,但是你的策略可能應該取決於實際發生的事情。

+0

謝謝。我已經在Flash中繪製了一張地圖。我只是想知道將每個圖塊存儲在一個符號中是否「足夠」 - 僅在舞臺內顯示地圖的各個部分。 – 2013-03-26 22:36:29

+0

但是把所有的符號/瓷磚放到一個大的符號(整個地圖)中就足夠了。隱藏屏幕外(舞臺外)? – 2013-03-26 22:38:53

+0

我不確定你使用符號的意思。據我所知,對於遊戲玩法數據,你應該很好去;圖形隱藏只需通過對象池來完成。 – Panzercrisis 2013-03-27 17:42:07