当前位置: 首页 > news >正文

Silverlight 2.5D RPG游戏“.NET研究”技巧与特效处理:(六)流光追影

  依稀记得《奇迹》里为了让装备炫酷“流光”而砸锅卖铁;仍旧迷恋每次的跳跃、冲刺、特写所带来的动态“追影”。岁月流淌,让无数玩家无论花费多少时间与金钱都无怨无悔,依旧那天地合一之特性装备;手握幻象残光之溢彩神器,踏着御风而行的随影擦肩而过,陶醉的不仅仅是自己,亦绝非寂寞...

  “流光追影” 效果不仅提升了玩家对于装备品质的不懈追求,同时在趣味性及耐玩性方面都是优秀网游所必备的要素之一;事实也证明了拥有华丽的“流光追影”装备效果的游戏业绩往往都很不错,比如基于逐帧手绘的《地下城与勇士》及名作续集《万王之王3

  当然,“流光追影”特效在游戏中的应用非常广泛,除了武器和身体等部位会用到外,其他还有很多场合比如描述物体的运动轨迹以及特写的慢动作回放等均可用之来修饰以达到提升视觉体验的目的:

  “流光追影”的实现方式根据需求的不同而显得多种多样。本节中,我同样还是以软实现的方式为本系列游戏Demo中的主角添置了漂亮而动感的追影与流光效果。首先以追影为例,实现方式与真实影子类似,通过实时复制一个角色当前的实体镜象并进行透明度逐减动画而实现;其中我们可以插入一个控制动画速率的参数以起到调节追影数量的作用,同时也可以增加动态颜色调节,这样根据角色装备的颜色以及场景环境的不同,我们可以实时的调整追影颜色使之于游戏整体密切交融:

/// <summary>
/// 显示追影
/// </summary>
/// <param name="role"> 所修饰角色 </param>
/// <param name="equipType"> 所参照的装备 </param>
/// <param name="color"> 颜色<上海闵行企业网站制作/span></param>
///<param name="coefficient">系数</param>
publicvoid上海徐汇企业网站制作 ShowChasingShadow(Hero role, EquipTypes equipType, Color color, double coefficient) {
  WriteableBitmap writeableBitmap
=new WriteableBitmap((int)role.OverallSize.X, (int)role.OverallSize.Y);
  writeableBitmap.Render(role.EquipEntity(equipType),
null);
  writeableBitmap.Invalidate();
  Rectangle rectangle
=new Rectangle() { Width = role.OverallSize.X, Height = role.OverallSize.Y, Fill =new SolidColorBrush(color) };
  rectangle.OpacityMask
=new ImageBrush() { ImageSource = writeableBitmap };
  writeableBitmap
=new WriteableBitmap((int)role.OverallSize.X, (int)role.OverallSize.Y);
  writeableBitmap.Render(rectangle,
null);
  writeableBitmap.Invalidate();
  E上海企业网站设计与制作ntityObject blurShadow
=new EntityObject() {
  ImageSource
= writeableBitmap,
  Center
= role.Center,
  Position
= role.Position,
  Z
= role.Z -20
  };
  space.上海企业网站制作Children.Add(blurShadow);
  Storyboard storyboard
=new Storyboard();
  DoubleAnimation doubleAnimation
=new DoubleAnimation() {
  From
=0.7,
  To
上海网站建设tyle="color: #000000;">=0,
  Duration
= TimeSpan.FromMilliseconds(role.HeartInterval * coefficient),
  };
  Storyboard.SetTarget(doubleAnimation, blurShadow);
  Storyboard.SetTargetProperty(doubleAnimation,
new PropertyPath("Opacity"));
  storyboard.Children.Add(doubleAnimation);
  EventHandler handler
=null;
  storyboard.Completed
+= handler =delegate {
  storyboard.Completed
-= handler;
  storyboard.Stop();
  space.Children.Remove(blurShadow);
  };
  storyboard.Begin();
}

  接下来是制作流光。它3D游戏中更为多见,通常用粒子渲染实现。当然了,2.5D游戏毕竟还是以逐帧为基础的平面游戏,在连贯性及层次感方面我们无法做到最真实。不过一样可以借鉴追影的方案,以拷贝一个角色实体对其进行微错时闪烁处理还是能达到不错效果的,代码与追影的相类似,这里就不罗列了。

  实际游戏设计中,英雄角色的实体通常会划分为多个层次:铠甲、武器、头饰、坐骑等等,不同装备根据状态进行流光呈现以展示装备的稀有或突出地位。于是之前的纸娃娃系统为其实现奠定了充分的基础,我们完全可以做到基于任何角色部位的装备进行分层的流光处理,就整体效果而言更接近客户端网游:

  其实,在我的脑海中还有非常多相当有趣的各式“流光追影”呈现方式,苦于无相关素材而无法一一列举给大家。仅仅10来行的代码,描绘的流光溢彩于形于色,或许这就是Silverlight所给我们创造的高效率游戏开发工程模式。

  最后还需说明一下,当前Demo所实现的光影效果中的真实阴影、追影、流光等用到的都是暂时无法利用GPU加速的RectangleWriteableBitmap、以及Opacity等对象及属性,均乃性能消耗之物。可想而知,编写它们的目的暂时仅以向大家展示Silverlight在特效制作方面所能达到的高度而目前还无法用性能来衡量;但这并非就意味着这些都将成为华而不实之物;就好比在少量应用(比如只针对主角)的场合中,使用它同样可以起到上海闵行企业网站设计与制作视觉冲击与性能一并兼顾的效果;同时,本节也是为了Silverlight 5 及更多优秀的后续版本埋下伏笔,从Silverilght 5目前已知的新特性中我们不难看出Silverlight正朝着更伟大的目标前行着,究其一天我们的游戏理想必将实现!

  本节源码下载地址:Demo5.rar

  在线演示地址:http://silverfuture.cn

转载于:https://www.cnblogs.com/waw/archive/2011/10/19/2218091.html

相关文章:

  • EdoJs之时间显示与转换
  • Eclipse开发Android应用程序入“.NET研究”门:重装上阵
  • 实现局部或全部页面内容不能选中的效果
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • Android使用自定义AlertDialog(退出提示框)
  • 如何在三个月掌握三年的经验
  • 利用vue-meta管理头部标签
  • Codeforces - 1198D - Rectangle Painting 1 - dp
  • 强化网络互连设备安全配置脚本
  • Codeforces - 1198C - Matching vs Independent Set - 贪心
  • 如何编写实施方案
  • 智能家居-思维的又一次跳跃
  • nginx配置虚拟主机,代理服务器
  • 去除HTML代码得函数
  • sql 插入数据 返回ID
  • 2017 前端面试准备 - 收藏集 - 掘金
  • canvas绘制圆角头像
  • Go 语言编译器的 //go: 详解
  • Object.assign方法不能实现深复制
  • Python_网络编程
  • python学习笔记-类对象的信息
  • REST架构的思考
  • scrapy学习之路4(itemloder的使用)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • TypeScript迭代器
  • Vue实战(四)登录/注册页的实现
  • 安卓应用性能调试和优化经验分享
  • 回流、重绘及其优化
  • 扑朔迷离的属性和特性【彻底弄清】
  • 使用 Docker 部署 Spring Boot项目
  • 思否第一天
  • 探索 JS 中的模块化
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • raise 与 raise ... from 的区别
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #{}和${}的区别是什么 -- java面试
  • #Java第九次作业--输入输出流和文件操作
  • (4) PIVOT 和 UPIVOT 的使用
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (算法)N皇后问题
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • **python多态
  • .Net 8.0 新的变化
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 事件模型教程(二)
  • .Net的C#语言取月份数值对应的MonthName值
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • // an array of int
  • @property括号内属性讲解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [1204 寻找子串位置] 解题报告
  • [2016.7 day.5] T2