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

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、白的则为可以通行,主角在上面可以正常移动。

时间: 2024-08-31 09:58:39

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)的相关文章

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十九) 人工智能(AI)之追踪者 经过前面28节的不断完善,主角已经具备了MMORPG游戏中的大多数功能:但是其他精灵例如怪物等暂时还是无法行动的,上一节中它们无辜的充当了主角的肉靶子,它们开始呐喊:上帝呀,请给予我们灵魂与智慧吧!其实灵魂早就有了,就是精灵的生命线程.那么该如何赋予精灵智慧呢? 精灵智慧的实现其实就是为精灵赋予AI(人工智能).完整的游戏引擎或多或少都必须拥有一定的AI,例如棋牌类型游戏有着

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十八) 经典式属性设计及完美的物理攻击系统 战斗即将开始!要实现MMORPG中的攻击系统,必须为精灵增加相关的参数及属性,这些内容及它们之间的牵连关系设计决定着游戏的新颖度与耐玩性:就好比当年的传奇,系统再普通不过了,但是却因为有着恰如其分的系统参数设定与完美的世界观定位,成就了一代不朽巨作.那么本节开始,我将首先对精灵控件进行属性完善,使之具传统经典游戏中的角色属性. 首先看下图: 这些属性是目前最经典的角

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十七)战斗前夜之构建动态障碍物系统 在标准的MMORPG中,每个精灵对象都占据着一块区域(脚底的一块小面积),该区域同样是障碍物系统中的一部分,并且它是动态的,随着精灵的移动而时时变化着.实现游戏中动态的障碍物构建使障碍物系统趋向完美是全面进军战斗系统的必要前奏,大家不想看着主角和怪物叠在一起打来打去吧? 之前的章节中障碍物数组只有一个,它只包含地图障碍物信息(地图中固定不动的障碍物),因此要实现动态的障碍物

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十六)通用型角色头像面板 目前游戏的开发进度已经基本实现了精灵对象之间的普通交互,接下来我们需要朝着实现战斗系统的目标前行.而实现它的前提是必须完善精灵控件的基本属性,如添加生命值.魔法值.活力值.经验值等基本属性并通过窗体界面进行完美体现,本节我将为大家讲解上述内容的具体实现. 既然是为精灵添加属性,大家首先想到的当然是为精灵控件加入属性值索引器: /// <summary> /// 生命值,[0]-当前

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)完美捕捉精灵之神器 -- HitTest 怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经过精灵(悬停于其上方)时则变成发光光标(1号光标图片),如果指向的精灵对象为敌对状态时则鼠标光标变为攻击光标(2号光标图片),当使用魔法快捷键时,鼠标光标变成凝法状

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十四) Be careful!前方怪物出没 游戏的精灵框架到此为止算告一段落,让我们一同来体验它带来的神奇效应. 一个安静的黄昏,主角悠闲的甩着它帅气的毛发独跑于林阴大道.怎知天色已晚即将进入月亮的领地,嘿嘿,我们的故事就从这里开始:Be careful,前方怪物出没! 实在不忍心让主角空有一身武艺而无处施展,本节为了不再让它孤单,我将向游戏中加入可爱的妖精妹妹与之为伴: 好象在哪见过呢?对,就是她了,可爱吧

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十三)自适应性窗口化与全屏化(WPF Only) 上一节中曾有提到,检测系统架构是否合理的评判标准之一就是系统的拓展性.在.NET网站应用中,一个优秀的架构可以在不同数据库之间相互转换,可以与不同的银行接口轻松对接,可以随意集成各种插件,而实现这些仅仅需要对局部进行小小手术而已:同样的,在游戏设计中,窗口化与全屏化的自适应完美切换同样是对游戏架构合理性的严肃考验,Are you ready? 游戏窗口化与全屏

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)重构 – 让代码插上翅膀自由飞翔 上一节,我将游戏地图模式进行了一次重大的变动,这在实际开发中意味着项目大规模重置,虽然表面上显得游刃有余,仅仅一个AllMove()方法的改变即实现了完美转型,这全得归功于前20节所搭建起的相对高度可扩展平台.但是,随着开发不断深入,我慢慢的感到些许的不安,因为代码上的日益松散与结构的渐渐稀疏如同Windows系统的磁盘碎片与日俱增,未来维护时的烦琐与痛心疾首已历历在目

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十一)主位式地图移动模式 是否期待了很久?本节就来个重量级的做为开场白吧:主位式地图移动模式.何谓主位式地图移动模式,即以主角为中心,它的移动带动着所有对象包括地图.物体对象.其他玩家.怪物等等的相对移动,这些对象的移动都是以主角为参照物的.最典型例子莫过于当前流行的MMORPG了,你控制的角色在地图中永远是处于窗口正中心的位置(除了8个角落外),这就是主位式地图移动模式(如下图). 有朋友开始焦躁了:我的妈

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十) 第一部分拓展小结篇 写了20节,一路向追着鬼子打一样都没停过,索性也想暂时休息一下整理整理思绪好完成后面的第二部分更为精彩的内容:诸如跟随式地图移动模式.NPC & 怪物 与主角的互动.对象AI.攻击与魔法.各种类型伤害计算.完美的RPG游戏界面--等等等等,激动吗?讲实话:我很激动! 读者声音:还没写就开始激动了,典型的傻子. ^_^||言归正传,本节就先来个承上启下的的小结吧,我打算分4个部分对前2