Silverlight 游戏开发小技巧:轨迹跟随效果

我们通常在游戏中有各种各样的粒子效果,其中有一种就是跟随鼠标发生的轨迹动画,在鼠标经过的地方会产生一些特效,这种方式我们在粒子当中经常使用,本篇使用一个简单的例子再次将粒子系统改善,更加精简更加高效。

如果有兴趣的同学可以读一下以前的

Silverlight C# 游戏开发:绚丽的粒子特效-粒子效果(二)

但是这今次实现方法更加简单更加偏向于美术设计师,因为这次的编程将基本上在Blend中实现。

在继续往下看之前,你需要了解MouseMove事件,以及基本的控件、故事板的知识,只有这样在下面的操作中比较容易理解,而我们目的效果是,当鼠标经过一个地方,会出现闪烁的小星星。

首先先建立工程,然后建立一个用户控件UserControl,我们起名为FlashPoint,顾名思义这是一个闪烁的点点。

可能建立方式各有不同,但是我们只是需要一个没有填充色的LayoutRoot,然后在最左上为中心画一个我们想要的图形,当然了,你也可以使用图片。

现在创建一个故事板动画,同样动画的是怎么编排可以看各自的需求设计。

在下面的例子中实现一个闪烁出现的小方块然后渐隐消失掉。

选择需要动画的目标,添加一个关键帧,然后找到这个目标控件的变换属性(Transform),设置为0,0,这样在动画播放的最开始是完全不可见。

然后拖动故事板的时间线,在1秒的位置上增加另外一个关键帧,将关键帧上的XY放缩变换设置为1,1,设置位置就是第一个关键帧的地方。

现在选择关键帧,我们可以使用Silverlight自带的缓冲(Easing)方法,制作闪烁出现的效果,我们选择Elastic Out的方法,你可以播放一下看看感觉:)

好了,最后在1.5秒的位置设置新的关键帧,将不透明度设置成0%,再次播放一下,你会看到一个突然蹦出的小方块,然后消失掉的故事板动画。

好了,截止现在基本的粒子控件制作完毕,现在打开MainPage控件将背景设置成为灰色或者渐变色,因为上面的小方块是白色的,为了更好看,并且把LayoutRoot从Grid改成Canvas,这样可以方便我们对位置的操作,

下面就是Coding时间了,在这里我将弄几个小的技巧增加程序的便利性。

在FlashPoint.cs的类构造中,添加一行代码,就是故事板的开始动画,比如说:Storyboard1.Begin();

现在打开VS或者在Blend里修改.cs文件,在MainPage.cs中加入鼠标的移动事件或者重写本身的OnMouseMove方法,我用的是重写:)

Code Snippet
  1. public partial class MainPage : UserControl
  2. {
  3. public MainPage()
  4. {
  5. InitializeComponent();
  6. }
  7. protected override void OnMouseMove(MouseEventArgs e)
  8. {
  9. var pos = e.GetPosition(this);
  10. var point = new FlashPoint();
  11. LayoutRoot.Children.Add(point);
  12. Canvas.SetLeft(point,pos.X);
  13. Canvas.SetTop(point, pos.Y);
  14. base.OnMouseMove(e);
  15. }
  16. }

好了,现在运行一下看看,

但是现在仍有很多的问题,比如这么new出来的对象一定是非常多的,那么怎么才能正确的将控件对象移除掉呢?在我的另外一片有关于粒子文章中,使用的方式是计时器的循环运算,然后反着来遍历,将符合条件的移除掉,这是因为粒子具有很不确定的因素,所以需要遍历处理,更何况还涉及到轨迹的计算逻辑,虽然说我们比较明确动画的时间长度,可以使用计时器从集合中RemoveAt,而这次我们将使用一个更加简便的方法解决这个小瑕疵。请看下面的代码

Code Snippet
  1. {
  2. public FlashPoint()
  3. {
  4. InitializeComponent();
  5. Storyboard1.Completed += new EventHandler(Storyboard1_Completed);
  6. Storyboard1.Begin();
  7. }
  8. void Storyboard1_Completed(object sender, EventArgs e)
  9. {
  10. Storyboard1.Completed -= Storyboard1_Completed;
  11. var parent = this.Parent as Panel;
  12. if (parent != null)
  13. parent.Children.Remove(this);
  14. }
  15. }

这是我们自定义的控件FlashPoint的构造和事件代码,在构造函数中注册动画完成事件,然后在完成的部分实现我们的具体逻辑,我们目的是让父一级移除我们,所以先要判定是否是一个标准的Panel的容器,Panel类请参看官方Silverlight文档。

本工程的源代码下载如下:点击直接下载

实际展示效果:

推荐Silverlight游戏开发博客:深蓝色右手

posted on 2011-02-03 00:53 nowpaper 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/nowpaper/archive/2011/02/03/1948913.html

Silverlight 游戏开发小技巧:轨迹跟随效果相关推荐

  1. Silverlight 游戏开发小技巧:动感小菜单2

    Silverlight 游戏开发小技巧:动感小菜单2 动感小菜单其实是想模仿Apple的菜单按钮设计制作,但是画虎不成反类犬,看起来有点别扭,昨天各位园友提了这方面的建议,感觉太硬如果加入动画可能更好 ...

  2. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单

    网页应用受限于自身的浏览器范畴,不能把华丽效果完全展示,正是因为如此,在网页上诞生了无数绚丽的设计,虽然动感程度和桌面应用无法比拟,但是在UI上却下足了功夫,用户体验可以说无以伦比,比如说小小的菜单, ...

  3. Silverlight 游戏开发小技巧:实现街霸4的选人界面

    Silverlight 游戏开发小技巧:实现街霸4的选人界面 上一篇只是一个引子,用来说明Projection的基本操作,游戏研发都是用这些小的基本功能慢慢组合出来,其实这一篇仍然是Projectio ...

  4. Silverlight 游戏开发小技巧:扇形排列元素

    Silverlight 游戏开发小技巧:扇形排列元素 斗地主风靡了大江南北,在春晚都做免费性推广,棋牌游戏平台几乎将其作为标配,但是牌类游戏总是一成不变的样子--横向排列,如果扇形排列应该更加符合真实 ...

  5. Silverlight 游戏开发小技巧:角色升级特效

    这次我们将使用Projection完成一些有趣的RPG游戏中常用的特效:升级和传送点特效,我们不需要请特效师制作复杂绚丽的特效,而是只需要他们提供关键的几张图片或者设计样式,如果了您有本领教会他们使用 ...

  6. Silverlight 游戏开发小技巧:星球大战字幕效果

    各位科幻迷可能对星球大战的字幕效果印象深刻,这个电影字幕表现手法曾经风靡大小美国影片,甚至超人影片和电视也曾经用此来做开场和结尾字幕,今天我就将这个效果在blend里面制作技巧告诉大家,下面是星球大战 ...

  7. Silverlight 游戏开发小技巧:昼夜交替动画

    记得在WP7上玩一个游戏有段动画很有趣,是背景在进行昼夜交替,一会儿白天太阳出来白天了,一会儿月亮蹦出来夜晚了,在以前做C++程序的时候曾经实现过类似的效果,今天早上移植了一下到Silverlight ...

  8. 一起谈.NET技术,Silverlight 游戏开发小技巧:实现街霸4的选人界面

    上一篇只是一个引子,用来说明Projection的基本操作,游戏研发都是用这些小的基本功能慢慢组合出来,其实这一篇仍然是Projection,但是我们将会做一个比较复杂的应用使用silverlight ...

  9. Silverlight 游戏开发小技巧:技能冷却效果1(Cooldown)

    到目前为止,大家都非常推崇魔兽的技能冷却效果,就是这样的,我记得群里还对这个效果展开过探讨,其实实现起来并不难,关键是思路是否正确,这部分我得谢谢猪笨无罪,是他先想出的解决方案,他不愿意写博客,也就只 ...

最新文章

  1. swift基础--变量
  2. spring 获取配置文件的值
  3. VTK:Filtering之GenericClip
  4. vb.net 如何文件指定打印机打印文件_使用Dropbox文件请求配合Canon Inkjet实现多用户文件打印...
  5. 如何在 ASP.Net Core 中使用 SignalR
  6. 图解springmvc 执行流程
  7. 使用maven快速入门
  8. DSP matlab产生正弦数字采样信号(M2.4)
  9. 如何解决wampmysqld服务无法启动,错误id=1067
  10. WPF太阳、地球、月球运动轨迹模拟
  11. dnastar拼接反向互补序列_DNAstar使用说明
  12. .NET破解之百分百营销软件系列
  13. matlab中与或非、等逻辑符号
  14. 我国计算机发展历程简述,简述计算机的发展历程??
  15. GitHub下载加速利器
  16. 图论 —— 染色法判断二分图
  17. 鸿蒙系统和安卓有哪些区别?鸿蒙会取代安卓吗?
  18. c语言写易语言支持库6,易语言编写支持库
  19. 多线程的实际应用场景
  20. python毒酒检测_一道著名的毒酒问题

热门文章

  1. Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie
  2. qt 拖拽 修改大小
  3. 总结网站调用Flash的几种方法【转】
  4. Raspberry Pi 3B 安装NoneBot2
  5. YOLOv5的pytorch模型文件转换为ONNX文件
  6. ComponentOne Ultimate 2020中文版
  7. Adobe Audition CC 2020中文版
  8. apache 提示You don't have permission to access /test.php on this server.怎样解决
  9. memcache redis
  10. 04-java学习-选择结构