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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法

 2009-06-22 08:32:38 来源:WEB开发网   
核心提示: 如果大家能将上一节中讲解的内容都吸收的话,那么可以将修改的部分与上一节的代码进行对比,C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法(6),再结合本节前部分内容的讲解就会慢慢的理解了(请大家发散自己的思维吧), 到这我们就

如果大家能将上一节中讲解的内容都吸收的话,那么可以将修改的部分与上一节的代码进行对比,再结合本节前部分内容的讲解就会慢慢的理解了(请大家发散自己的思维吧)。

到这我们就完成了该斜度60的地图构造。按Ctrl+F5看看我们的成果吧:

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法

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

 嘿嘿,A*寻路将我们的路径描绘得非常明显,显然主角是沿着这样一条斜度60的路线饶过这个片菱形障碍物区域的。而因为此例我将W(0,0)点和G(0,0)都定位在窗口的左上角,所以根据本节前部分关于G坐标系的讲解,上图中红色的区域即为含有负值的区域,所以不被寻路方法所识别。您可以尝试对该区域进行点击,它将告诉您路径不存在,从而也证明了我们这个坐标系的构建是成功的。

最后为了让朋友们能更好的理解比较,我将本节例子中的障碍物代码拷贝替换掉上一节的障碍物代码,并将菱形换回成正方形,代码如下:

            //构建障碍物
            for (int x = 10; x < 20; x++) {
                for (int y = 0; y < 10; y++) {
                    Matrix[x, y] = 0;
                    rect = new Rectangle();
                    rect.Fill = new SolidColorBrush(Colors.GreenYellow);
                    rect.Opacity = 0.3;
                    rect.Stroke = new SolidColorBrush(Colors.Gray);
                    rect.Width = GridSize;
                    rect.Height = GridSize;
                    Carrier.Children.Add(rect);
                    Point p = getWindowPosition(x, y);
                    Canvas.SetLeft(rect, p.X);
                    Canvas.SetTop(rect, p.Y);
                }
            }

 然后大家可以尝试运行一下新的Window9.xaml,运行效果图如下:

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法

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

同样的障碍物代码在第九节的直角地图坐标系中是垂直方型显示的,而在本节中则为菱形方式显示。同样证明了本节斜度α地图的成功构造!

Good idea!难道不是吗?嘿嘿,比较复杂也是非常重要的一节。如果你能掌握它,想想A*寻路在不同模式地图中可以完全忽略基本单元格的样式(无论是正方形的,或是菱形的,甚至六边形的)可谓无所不能,想想斜α地图在实际游戏开发中的运用几乎无处不在,这难道不是莫大的成就吗?

至此,关于地图表层的基础知识基本都讲解完了,地图构造原理涉及的知识方方面面,有人就打这样的比方:一个好的地图编辑器决定着一款游戏的成功与否,这毫不为过。所以我们离真正完成它还有很长的路要走。下一节我将介绍如何实现地图的遮罩效果,敬请关注。

上一页  1 2 3 4 5 6 

Tags:开发 WPF Silverlight

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