地圖處理最後一節,講解如何透過傳送點實現主角在地圖間傳送與地圖切換。關鍵在於「移除舊地圖物件(保留主角)→ 載入新地圖物件」。本教程每張地圖資訊記錄於 Config.xml,含表層、遮擋層、障礙物層與傳送點資訊。
包含參數屬性:描述 Tip、地圖索引 Key、目標地圖代號 To、傳送後座標與朝向。內建 DispatcherTimer 播放傳送點動畫。
<Teleports>
<Teleport Code="6" Key="10" To="1" ToX="530" ToY="1040" ToDirection="1"
X="600" Y="600" CenterX="64" CenterY="50" SingleWidth="128" SingleHeight="100"
Tip="東海龍宮" FrameNum="15"/>
</Teleports>
邏輯中將傳送點 Key 記錄至障礙物陣列(原僅 0/1,現擴充 2~255 供擴充)。即時偵測主角所在障礙物值若為某傳送點 Key,觸發傳送事件。
傳送至新地圖後,移除舊地圖資源並載入新地圖資料(程式碼較冗雜,請參考原始碼)。一張地圖可含多個傳送點串聯多地圖,第二張地圖配置例:
<Teleports>
<Teleport Code="6" Key="10" To="0" ... Tip="雲海仙境" .../>
<Teleport Code="6" Key="11" To="2" ... Tip="天龍港" .../>
</Teleports>
第二張地圖「東海龍宮」含兩傳送點,可自由往返「雲海仙境」與「天龍港」。
正式網遊地圖切換伴隨大量資料載入,常見做法:顯示背景圖+進度條,透過畫布透明化與禁用輸入實現。本節源碼未加載入過程。
本節邏輯因功能持續堆疊導致結構冗雜,存在 Bug。決定進行第二次重構,並轉移至 Silverlight 平台,標誌 WPF 教程結束。未來將基於 Silverlight 3.0 完美繼承既有功能並持續演進,期待與大家共同打造更強引擎!