曾几何时开始迷恋无垠的天际,幻想着插上翅膀去飞翔。《天翼之链》、《奇迹》、《梦幻诛仙》向无数玩家展示了飞行的世界。翅膀,常常是一种身份的象征,但如能再赋予它自由的含义,好比《永恒之塔》中如履空气般畅快淋漓,游戏魅力自然无可阻挡。

如何让游戏中的角色自由飞翔?角色飞行时有何特殊之处这是游戏在设计需求时最需要考虑的问题。在如《星钻物语》、《天翼之链》等Q版网络游戏中,翅膀仅仅作为一种美丽的装饰品,强者的象征,附加属性除此之外毫无他用;又如《奇迹》、《封神榜》等游戏,当角色装备翅膀后移动模式会变为“超低空”飞行模式,但仅仅表现为移动时外表样式的改变,当遇到任何地面障碍时仍是无法飞越的;而在2D的《梦幻诛仙》中,飞行模式却体现得到华丽而不失真实。当主角在天空时,地面的所有对象物体均会被缩小为原始的60%左右比例,并且在天空层与地面层之间覆盖着一层透明的云雾缭绕效果,仿若真正置身于天际:

这种2.8D的视觉效果在Silverlight中可以通过两种途径来实现:HLSL渲染和按需缩放。如果未来的Silverlight版本能完全激发GPU的渲染功能,那么利用HLSL直接对精灵托盘(Carrier)和地图托盘进行相应比例的缩小渲染后,再对主角等飞空的对象进行放大复原二次渲染即可,其中在天空层与地面层之间放置一张透明度的云雾PNG图片,一切其实可以这么简单滴;但在目前Silverlight还无法很好调用GPU的前提下,我们可以通过循环遍历所有在游戏窗口中显示的对象,如果不是在飞行状态的,则尺寸缩小为原始的60%,反之则不变,具体逻辑还算简单,只是需要特别注意一下地图的处理,例如地图使用的是Tile块或整图就无大碍,如果是切片按需加载的则相对麻烦些,需要多写算法。额外的,精灵在飞行过程中将无视一切障碍,并且移动速度会相比在地面上快一些,同时还需要考虑降落时所处的坐标是否为障碍物,否则不允许着陆等逻辑。

《梦幻诛仙》算是目前层次效果最好的2D网游之一,由于本教程示例游戏结构架设之初并未考虑陆-空分层,因此本节暂时以实现主角传统低空飞行模式为主,即从外观上体现,并同时能实现障碍物的飞跃。

这里我准备的素材来源于《封神榜2》的翌使,精灵要飞行,当然需要添加一个IsFlying属性来描述是否正处于飞行状态,如果是,则遇到障碍物碰撞检测均忽略掉,例如:

private bool WillCollide(QXSprite sprite, Point p) {

if (sprite.IsFlying) { return false; }

……

}

然后将翅膀道具添加进游戏,在本教程示例游戏中,为简单起见,我将翅膀归到衣服类;并添加了一个新的武器:弓。在天上飞的,用弓才酷嘛,弓的武器属性均记录在Config.xml配置文件中,其中有两个参数非常关键:AttackRange和LongDistanceAttack分别代表攻击距离和是否远程物理攻击。另外,由于主角的素材来源于两个不同游戏,因此大家在运行演示程序时遇到错位情况请不要见怪啦,理解原理为主:

装备弓后:

嘿嘿,插上翅膀的主角此时可以进入所有示为陆地障碍物的区域了。由于弓有400的攻击射程,接下来我们不妨引上一群怪,并飞到障碍物上,一箭一箭的射得怪物们毫无脾气,陆-空不同嘛,这就是飞行的特权:

很酷吧,一丁点代码的修改就实现了这么有趣的功能。当然,在实际制作中,大家应该专门设置一个翅膀装备格,并根据需要处理好陆-空之间的障碍物逻辑与战斗逻辑,如《永恒之塔》的空战形式等。如果想制作类似《梦幻诛仙》的陆-空分层视觉效果,那么在一开始为游戏设计架构时就应该做好铺垫,否则后期修改会复杂许多。

主角装备上弓后已经具备了远距离攻击能力,细心的朋友一定有发现似乎还缺少了些什么。是的,射击后怪也伤血了,但始终都没见有箭飞出?嘿嘿,这就是下一节要讲的远距离攻击及单体魔法攻击效果了,敬请关注。

本节源码请到目录中下载,在线演示地址:http://silverfuture.cn

作者:深蓝色右手
出处: http://blog.csdn.net/alamiye010/
教程目录及源码下载: 点击进入
本文版权归作者和CSDN共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十六)飞行模式 – 自由VS天空相关推荐

  1. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十八) 完美精灵之八面玲珑(WPF Only)②...

    紧接着上一节,首先得解释一下为什么需要将这272张图片合成为一张大图.因为如果游戏中还有装备.坐骑等其他设置,那么我们就需要对图片源进行时时的合成:同时对272张甚至更多的图片进行合成效率高还是对2张 ...

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

    在当前的网络游戏中,地图基本都是采取一定斜度的拼装地图,这其中存在两种斜度地图的构造方式: 第一种我称之为伪斜度地图:该类型地图表现层图片为斜度的,但地图基底障碍物等的构造则实为正方形,如下图: 其实 ...

  3. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(十四) 精灵控件横空出世!①

    在上一节中,我们实现了地图牵引式移动,同时还遗留着一个小尾巴:主角和障碍物该如何跟随着地图的移动而移动? 上节中有点到,只要在地图移动的同时,时时根据主角等对象物体的X,Y坐标进行相对于地图的X,Y坐 ...

  4. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录

    本系列教程的示例代码下载(感谢 银光中国 提供资源分流): 第一部分源码:WPFGameTutorial_PartI(1-20节) 第二部分源码:WPFGameTutorial_PartII(21-2 ...

  5. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二)让物体动起来②

    第二种方法,CompositionTarget动画,官方描述为:CompositionTarget对象可以根据每个帧回调来创建自定义动画.其实直接点,CompositionTarget创建的动画是基于 ...

  6. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①

    序:自从QXGame(WPF GAME ENGINE)游戏引擎公布以来,受到很多朋友的热切关注,于是乎有了写教程的想法.那么从今天开始,我将带领大家一步一步的学会如何使用纯C#开发WPF/Silver ...

  7. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...

    怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经 ...

  8. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四)实现2D人物动画①

    通过前面的学习,我们掌握了如何动态创建物体移动动画,那么接下来我将介绍WPF中如何将物体换成2D游戏角色,并通过使用前面所讲的DispatcherTimer计时器来实现2D人物角色的各种动作动画. 动 ...

  9. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十九) 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏②...

    本节,我将完成本教程示例游戏的最终两个魔法:传说中的连锁闪电与暴风雪.如此经典与华丽的家伙无论在哪款好游戏中都少不了它们的踪影. 首先是连锁闪电,在<英雄无敌>中体现得尤为出色,击中一个怪 ...

  10. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十六)通用型角色头像面板...

    目前游戏的开发进度已经基本实现了精灵对象之间的普通交互,接下来我们需要朝着实现战斗系统的目标前行.而实现它的前提是必须完善精灵控件的基本属性,如添加生命值.魔法值.活力值.经验值等基本属性并通过窗体界 ...

最新文章

  1. 《oracle大型数据库系统在AIX/unix上的实战详解》讨论31: oracle、sybase 数据库的不同访问...
  2. because it is not a variable 编译错误解决方案
  3. P7599-[APIO2021]雨林跳跃【二分,倍增,ST表】
  4. Java笔记-对CountDownLatch的理解(对比Qt中的QSemaphore)含实例
  5. MapGuide应用开发系列(八)----MapGuide Studio准备地图之地图(Map)
  6. php将abc转换成整形是什么意思,php强制转换类型的方法
  7. oracle之三 自动任务调度
  8. Python3入门机器学习经典算法与应用 第3章 Jupyter Notebook基本用法 学习笔记
  9. 3ds Max 2012 简体中文版 带注册机32位64位
  10. html 首行缩进两个空格,关于css的text-indent首行缩进两个字符和图片缩进的问题...
  11. 图灵——如迷的解谜者
  12. 戒指的戴法,终于收齐了!
  13. 51单片机LCD1602电子时钟
  14. flv.js构建及下载
  15. 怎么使用JavaScript进行进制…
  16. c语言中的output用法,OUTPUT 子句
  17. 记又一次面试失败的经历
  18. Fragment already added 问题
  19. IMSI(MIN)介绍
  20. linux访问共享命令,Linux访问共享资源命令 smbclient

热门文章

  1. h5免签聚合支付系统yy支付-y币+yy陪玩-系统源码
  2. 4.6.2 万能转换器boost::lexical_cast
  3. 终极加密文件夹 v2.93 绿色
  4. MFC中使用OLE/COM操作EXCEL的方法
  5. 鸿业revit电气插件使用结果
  6. 【CS231n assignment 2022】Assignment 2 - Part 2,优化器,批归一化以及层归一化
  7. 入坑之路之COMSOL简介及学习心得
  8. 【NoteBook】吴晓波:《影响商业的50本书》——第三部分:动荡年代与潮汐的方向
  9. SOLIDWORKS教育版可以试用吗?如何申请SOLIDWORKS教育版免费试用?
  10. 信管专业如果考计算机证考什么,信管专业可以考的证书