Welcome

首页 / 软件开发 / C# / C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(三十五)2010-02-23 博客园 深蓝色右手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();
}