Welcome

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)2010-01-26 博客园 深蓝色右手C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)神奇的副本地图

前面几节详细的讲解了游戏地图的完整构造,比较有难度的是关于地图内层如障碍物的实现。A*算法往往能让众多的初学者望而止步,斜度α地图则更需要一定的几何知识及抽象思维。很多朋友就问了:什么年代了,都在说面向对象、提高开发效率,难道就没有大众化可以让各层次能力的朋友们都能轻松制作地图引擎的方法吗?大家是否还记得上一节中遗留的一个小悬念,杀手涧就是它了:神奇的副本地图。

大家先看上图,左边的是地图表现层,它的尺寸为800*600。右边的则是我通过Photoshop在原图基础上勾勒出来的该地图的副本,同样它的尺寸也为800*600。这里特别要提的是该副本是由简单纯色调组成的,因此能够压缩到极小的容量,几乎忽略不计,这是它能作为我们得力工具的前提,也是Silverlight制作基于网页游戏的必要条件。好了,接下来我们详细介绍一下此副本:大家对照原图很容易会发现它上面的黑色其实代表的就是地图中的障碍物,那大片的白色区域呢?其实就是我们可以任意通行的区域了。至于黄色,聪明的朋友应该也不难猜到,它代表的是地图中的传送点。当然,您还可以在此副本中增加例如红色代表陷阱,绿色代表特殊NPC等等。是否觉得像画画一样的?嘿嘿,这就是我主张的面向对象的游戏编程创新思想了。到此地图副本制作完成了,那么该如何利用它呢?

精华又出现啦,来看看优美的拾色方法:

//图片拾色
private Color pickColor(BitmapSource bitmapsource, int x, int y) {
CroppedBitmap crop = new CroppedBitmap(bitmapsource as BitmapSource, new Int32Rect(x, y, 1, 1));
byte[] pixels = new byte[4];
try {
crop.CopyPixels(pixels, 4, 0);
crop = null;
} catch (Exception ee) {
MessageBox.Show(ee.ToString());
}
//蓝pixels[0] 绿pixels[1] 红pixels[2] 透明度pixels[3]
return Color.FromArgb(pixels[3], pixels[2], pixels[1], pixels[0]);
}

太强大了,有了它就好比吕布拿上方天画戟-游刃有余!(该方法只能在WPF使用,至于如何在Silverlight中调用,Silverlight3.0将会给您一个完美的解决方案。^_^)

副本地图的作用是非常凶猛的,在它上面我们可以自由绘画出红黄蓝绿青橙紫等等N多颜色来描绘不同的地图属性,然后实现类似以下操作:

1、如果主角采到的点是黑色就相当于主角碰到了障碍物,这时主角的动作即为停止。

2、如果是传送点,则根据坐标范围(或其他条件等)判断是传送到哪张地图;

3、如果是陷阱则将触发什么事件,如去血或被传送,或是刷怪等等;

4、当然还可以有其他颜色,假如游戏中有飞行坐骑等元素存在(实现2D地图中的三维空间),那么同样可以用一个例如蓝色来代表空中障碍物区域,或用紫色来代表陆地和空中均属的障碍物,这些都是相当灵活的。

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