WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game C... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)神奇的副本地图

 2009-06-22 07:08:39 来源:WEB开发网   
核心提示: 5、白的则为可以通行,主角在上面可以正常移动,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)神奇的副本地图(3), 更美妙的是,此方法可以与A*寻径相结合,它就是我前面几节讲到的A*寻路方式,设置好后,从而创造出更加优美的角色移动(例如帝国时

5、白的则为可以通行,主角在上面可以正常移动。

更美妙的是,此方法可以与A*寻径相结合,从而创造出更加优美的角色移动(例如帝国时代中采取的就是它独特的改进型A*,所以根据游戏自身的特点您可以对A*进行优化,Gameres论坛有很多高手的文章,大家可以参考一下)。接下来大家来回忆一下第七节讲到的A*寻径算法,此方法找到的路径中如果有经过障碍物倒还好,但是如果没有障碍物的,那么此路径全程中将或多或少会有些折叠的地方(如下图)。

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)神奇的副本地图

  图片看不清楚?请点击这里查看原图(大图)。

人类总是希望将东西做得完美导致本节的重点出现了:如何通过神奇的副本地图来优化A*寻路,让它更加贴近真实呢?这里我们需要先理解一个关键知识点:主角所处的地图中所有的点与副本地图中所有的点都是一一对应(映射)的关系。例如假设主角在地图中的坐标为(356,248),那么此坐标对应副本地图坐标也同样为(356,248),这样我们就可以通过函数方法,将主角的坐标点作为参数在副本地图中找该点的颜色,看看颜色分别是黑的,还是白的,或是黄的等等,从而映射回主角的地图可知主角当前处于地图中是障碍物,还是可同行区域,或是传送点等等。了解了原理后,下面我就用代码来实现它:

   首先我们需要写出两种移动方法(具体代码就不列出来了,在本教程的目录中有下载):第一种我定义为NormalMove移动方法,它就是我第一节中讲到的点与点之间的直线移动,在此方法中我稍微改动了一些,使坐标定位到主角的脚底,并且将移动目标终点记录到Point Target中。第二我将之定义为AStarMove移动方法,它就是我前面几节讲到的A*寻路方式。设置好后,我们就可以根据从副本地图中获取的点的颜色判断来调用相应的移动模式了。

上一页  1 2 3 4 5 6  下一页

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接