C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(三十五)地圖編輯器的初步使用
上一節我們制作好了地圖編輯器,並初步實現了導出地圖中的障礙物信息及實現A*模擬尋路。那麼當我們得到了包含有障礙物數據信息的XML文件後,又該如何將之應用到本教程的示例游戲中呢?
本節還是以上一節的那幅地圖為例,我們首先通過編輯器載入該地圖並在上面描繪出所有障礙物:
然後點擊導出障礙物按鈕,我們將得到一個包含有類似如下信息的XML障礙物數據文件:
<Item ID="Obstruction" Value="240_0,241_0,238_1,239_1,240_1,236_2,237……>
接下來打開示例游戲項目中的Config.xml配置文件,並找到<Map Sign="1">這個代表1號地圖的節點。在此節點中增加一個名為Obstruction的屬性,並將剛才導出的障礙物數據信息XML文件裡的Value值復制到Obstruction屬性值內,最後的修改結果如下:
<Map Sign="1" Obstruction="240_0,241_0,238_1,239_1,240_1,236_2,237……>
障礙物設定完後,我們還需要在地圖障礙物初始化中讀取它:
//障礙物固定值與變動值(二維矩陣)
byte[,] FixedObstruction = new byte[256, 256], VaryObstruction;
/// <summary>
/// 初始化障礙物
/// </summary>
private void InitObstruction() {
for (int y = 0; y < FixedObstruction.GetUpperBound(1); y++) {
for (int x = 0; x < FixedObstruction.GetUpperBound(0); x++) {
//設置默認值,可以通過的均在矩陣中用1表示
FixedObstruction[x, y] = 1;
}
}
string[] obstruction = Super.GetTreeNode(
Super.SystemConfig, "Map", "Sign", "1").Attribute("Obstruction").Value.Split(',');
string[] str;
for (int i = 0; i < obstruction.Count(); i++) {
str = obstruction[i].Split('_');
FixedObstruction[Convert.ToInt32(str[0]), Convert.ToInt32(str[1])] = 0;
}
VaryObstruction = (byte[,])FixedObstruction.Clone();
}