這裡我的處理是每次更換切片時都首先清除原有的9塊切片,然後再添加新的9塊切片到指定位置,終究是比較苯的辦法,但實現起來簡單;優化它的方法有兩種:1)判斷主角是向右移動到了新的切片上還是向左或是向下、向下,然後移除對應的3塊再添加3塊。2)將所有切片加載進地圖中,只顯示主角當前所處的9塊切片,而其他的所有切片均處於Visibility.Collapsed狀態不參加布局。此兩種方法應該算得上最終解決方案,您可以根據您游戲的實際需要進行選擇。
最後,在游戲的輔助線程中間隔檢測主角所處的切片位置(由於有間隔,所以在區域轉換時偶爾會出現白邊的現象,如果接受不了,您完全可以將下面兩行代碼放到畫面Loop中進行時時判斷處理):
leaderSectionX = (int)(Leader.X / mapSectionWidth);
leaderSectionY = (int)(Leader.Y / mapSectionHeight);
嘿嘿~是不是很簡單,且讓我們先運行一下看看效果:
問題出來了,切片的邊緣怎麼也給顯示了出來?難道是我們沒有切割好嗎?我將這些切片放進PS中重新對接,其實是可以完美吻合的,問題到底出在哪?希望好心的朋友告訴一下啦~。當然,這些縫隙是可以很輕易處理掉的,只需將每塊切片的寬與高各加1即可:
……
mapSection = new Image() {
Source = Super.getImage(string.Format("Map/{0}/Surface/{1}_{2}.jpg", mapCode.ToString(), x, y)),
Width = mapSectionWidth + 1,
Height = mapSectionHeight + 1,
Stretch = Stretch.Fill,
};
……
修改後,我們再次運行游戲,當主角移動到右下角時,我們會看到兩片白色無圖區域:
難道又是BUG?NO,NO。在上一節中我曾說過,地圖編輯器只會按比例切割出同尺寸圖片,如果某片的尺寸小於每片單位尺寸,則不切割。由於我們使用的示例地圖圖片的尺寸為2560*1920,因此以每片400*300為單位,只能切割出2400*1800的區域,這就是導致游戲中最終出現上圖情況的原因了。
遇到這種情況我們該如何處理呢?最好的辦法就是規范統一地圖尺寸與切片尺寸:假設您的游戲窗口尺寸為800*600,切片單位為400*300,那麼您的整張地圖尺寸必須設定寬度為400的整倍數,高度為300的整倍數。另一種方案就是通過邏輯來呈現這些邊緣不標准的切片。
地圖自適應區域加載的實現,在一定程度上優化了游戲的整體性能,在地圖尺寸越大的游戲中表現得更為突出。所有關於地圖的教程快接近尾聲了,下一節我將為大家講解如何實現地圖切換與傳送,敬請關注。