程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(三十八)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(三十八)

編輯:關於C#

C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(三十八)地圖間的傳送與切換

終於到了地圖處理的最後一節,本節我將為大家講解如何通過傳送點實現主角在地圖間的傳送以及地圖之間的切換。地圖轉換的關鍵在於把握好移除與添加:即移除之前地圖上除主角之外的所有對象,然後再重新加載新地圖上的所有對象。本教程示例游戲中,每張地圖的信息都詳細的記錄於Config.xml配置文件中,包括每張地圖的表層、遮擋層、障礙物層等等,然後再附加上本節後面將向大家講解的傳送點信息;這樣,在地圖轉換時,我們只需根據配置文件來讀取加載相應的地圖數據即可。

實現的第一步,首先新建傳送點控件:QXTeleport,該控件包含一些傳送用的參數類屬性,例如傳送點的描述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>

接下來讓我們將主角移動到傳送點,此時畫面即會切換到第二張地圖:

大家可以看到,此張名為“東海龍宮”的地圖上分布著兩個傳送點,可分別將主角傳送到“雲海仙境”與“天龍港”。當然,這些傳送都是能自由往返的:

需要特別說的是,本節示例源碼中並未為傳送添加過程(Progress)。在正式的游戲開發中,特別是網絡游戲的開發中,地圖的切換伴隨著較多的新地圖數據加載(下載),此過程比較常見的做法就是顯示一張背景圖附加一個進度條。實現起來還是比較簡單的,例如可以通過將畫布透明掉,並禁掉所有的輸入來實現。

最後,本節的地圖傳送在原理上是實現了,但邏輯方面存在著BUG,這些BUG主要因為畫布中資源的管理問題而引起,這又要回溯到整個游戲框架架設的問題。就像本文開頭說的那樣,由於不斷的為游戲添加新功能,最終的結果誓必造成整體結構的冗亂繁雜,看來第二次重構勢在必行。

而這次重構,我打算建立在Silverlight平台上,這標志著WPF游戲教程就此終結;未來我將展示給大家的是基於Silverlight3.0的全新教程,且在完美繼承之前WPF下示例游戲的所有功能的基礎上,繼續往下寫,這是一個全新的開始。我也希望能在大家共同的的協助與探討下,將此Silverlight游戲引擎做得越來越棒!

歷史的進步永遠都包含著激情與渴望,讓我們一同迎接來自東方的第一線曙光!

出處:http://alamiye010.cnblogs.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved