Silverlight 2.5D RPG游戏技巧与特效处理:(六)流光追影

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

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

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

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

///<summary>
/// 显示追影
///</summary>
///<param name="role">所修饰角色</param>
///<param name="equipType">所参照的装备</param>
///<param name="color">颜色</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();
  EntityObject 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
=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();
}

NET技术Silverlight 2.5D RPG游戏技巧与特效处理:(六)流光追影,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。