在第四篇《Silverlight 解谜游戏 之四 粒子特效》中我们为游戏添加了一个粒子特效,但是当前的ParticleControl  只提供了一种圆形粒子,本篇将为其添加方形、三角形、星形等形状。

以下是五角星效果:

1. 首先在Interactivity\ParticlesBehavior 中加入ParticleShape.cs

其中包含ParticleShape 枚举:

public enum ParticleShape
{    Circle, Square, Star4,Star5,Star8,Custom
}

2. 下面来修改ParticlesBehavior.cs 程序:

2.1. 添加ParticleShape、CustomShapePathData 属性:

[Category("Shape")]
public ParticleShape ParticleShape
{get { return (ParticleShape)GetValue(ParticleShapeProperty); }set { SetValue(ParticleShapeProperty, value); }
}
public static readonly DependencyProperty ParticleShapeProperty =DependencyProperty.Register("ParticleShape", typeof(ParticleShape),typeof(ParticlesBehavior), null);[Category("Shape")]
public string CustomShapePathData
{get { return (string)GetValue(CustomShapePathDataProperty); }set { SetValue(CustomShapePathDataProperty, value); }
}
public static readonly DependencyProperty CustomShapePathDataProperty =DependencyProperty.Register("CustomShapePathData", typeof(string),typeof(ParticlesBehavior), null);

2.2. 初始化ParticleShape:

public ParticlesBehavior()
{... ...this.ParticleShape = ParticleShape.Circle;
}

2.3. 编辑OnShowParticles():

private void OnShowParticles()
{... ...p.ParticleShape = ParticleShape;p.CustomShapePathData = CustomShapePathData;AssociatedObject.Children.Add(p);
}

3. 修改ParticleControl.xaml.cs 程序:

3.1. 同样在ParticleControl 类中添加ParticleShapeCustomShapePathData 属性,在ParticleControl() 方法中初始化ParticleShape。

3.2. 因为粒子形状要继承于Shape,所以将类中所有Ellipse 更改为Shape(其中涉及到SpawnParticle 与UpdateParticles 方法)。

3.3. 在ParticleControl 类中添加星形粒子形状:

private const string star4 = "F1 M 50,-7.62939e-006L 55.1144,41.3803C 56.427,42.2647 57.5178,                              43.453 58.2861,44.8443L 100,50L 57.8372,55.2111C 57.1358,                              56.2565 56.2419,57.162 55.2062,57.8767L 50,100L 44.8675,                              58.4733C 43.3682,57.6757 42.0966,56.5067 41.1753,                              55.0891L -2.3533e-006,50L 40.7417,44.9645C 41.6922,43.1858 43.166,                              41.7288 44.9574,40.7991L 50,-7.62939e-006 Z";
private const string star5 = "F1 M 50,7.62939e-006L 38.5,36.7447L -1.95619e-005,36.3271L 31.3926,                              58.619L 19.0983,95.1057L 50,72.1381L 80.9017,95.1057L 68.6074,                              58.619L 100,36.3271L 61.5,36.7447L 50,7.62939e-006 Z";
private const string star8 = "F1 M 50,2.28882e-005L 54.558,36.8783C 55.5604,37.239 56.5077,                              37.7153 57.3837,38.2912L 78.3425,21.6575L 61.6127,42.7374C 62.1035,                              43.5727 62.5068,44.4656 62.81,45.4035L 100,50L 62.4628,                              54.6395C 62.1585,55.3832 61.7896,56.0936 61.3631,56.7638L 76.3839,                              76.3838L 56.6316,61.2618C 56.0088,61.6151 55.355,61.9202 54.6754,                              62.172L 50,100L 45.3246,62.1719C 44.605,61.9053 43.9144,                              61.579 43.2589,61.1989L 21.6575,78.3425L 38.7024,56.8655C 38.2481,                              56.1656 37.8571,55.4209 37.5374,54.6395L 4.31164e-005,50L 37.1902,                              45.4035C 37.4815,44.5022 37.8652,43.6425 38.3303,42.8356L 23.6162,                              23.6161L 42.7073,38.232C 43.5578,37.6826 44.4742,37.2266 45.442,                              36.8783L 50,2.28882e-005 Z";

3.4. 创建CreateShape 方法:

private Shape CreateShape()
{string pathData = "";switch (ParticleShape){case ParticleShape.Circle:return new Ellipse();case ParticleShape.Square:return new Rectangle();case ParticleShape.Star4:pathData = star4;break;case ParticleShape.Star5:pathData = star5;break;case ParticleShape.Star8:pathData = star8;break;case ParticleShape.Custom:if (string.IsNullOrEmpty(CustomShapePathData))return new Ellipse();elsepathData = CustomShapePathData;break;default:return new Ellipse();}string xamlPath = string.Format("<Path xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' " +"xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' " +"Data='{0}' Stretch='Fill'/>", pathData);Path path = (Path)System.Windows.Markup.XamlReader.Load(xamlPath);return path;
}

4. 编译后进入Blend,选择LayoutRoot 中的ParticlesBehavior

点选ShowParticles 中的EventTrigger,即可调整Shape 类型:

当然也可在CustomShapePathData 中自定义形状:

选择相应的形状后即可实现以下效果:

源代码下载:

Silverlight 解密游戏 之十 自定义粒子特效相关推荐

  1. PR片头模板 超震撼大气蓝色(颜色可自定义)粒子特效开场片头PR模板

    PR片头模板 超震撼大气蓝色(颜色可自定义)粒子特效开场片头PR模板下载 这是一个非常壮观的震撼大气蓝色粒子特效开场片头Premiere模板,具有动态动画的粒子和黑暗的气氛. 该模板包含1个logo占 ...

  2. Silverlight自定义粒子特效

    从网络上看到一处转载的Silverlight效果_粒子效果的小教程,在此收藏一下: 以下是五角星效果: 1. 首先在Interactivity\ParticlesBehavior 中加入Particl ...

  3. Silverlight C# 游戏开发:自定义鼠标(一)

    我们在游戏中经常应用自定义鼠标来提升游戏的画面品质,一个好的游戏怎么能没有好看的鼠标呢,关于Silverlight的各种自定义鼠标的方法很多,而我将为大家带来的是在游戏当中的应用效果,当然了,做法更加 ...

  4. java游戏开发入门(十) -粒子特效

    java游戏开发入门十 - 粒子特效 java游戏开发入门十 - 粒子特效 前言 编码 创建一个粒子发射器,并将粒子发射器添加到实体对象 效果图 完整代码 完整项目 java游戏开发入门十 - 粒子特 ...

  5. 【IOS-COCOS2D游戏开发之十】添加粒子系统特效并解决粒子特效与LAYER之间的坐标问题;...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/472.html ...

  6. Silverlight 解谜游戏 之四 粒子特效

    前几篇一直在Blend中工作没体现出开发者的作用,本篇将为订书器(Stapler)添加自定义粒子效果,当订书器被点击时产生更好的视觉效果.其中将使用到nerdplusart 的Silverlight ...

  7. 【iOS-Cocos2d游戏开发之十】添加粒子系统特效并解决粒子特效与Layer之间的坐标问题;

     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigame.com/iphone-cocos2d/472.html 一直以 ...

  8. 基于Java的Minecraft游戏后端自定义插件 06绘制简单粒子特效与BukkitRunable定时器

    绘制简单粒子特效与BukkitRunable定时器 粒子特效 多线程BukkitRunable 粒子特效 利用定时器来设定特效出现是否延迟,以及周期频率 奖励特效一: VexLighting 在玩家处 ...

  9. 最简单的 UE 4 C++ 教程 ——带碰撞和粒子特效的角色操控【二十九】

    效果图 原教程是基于 UE 4.18,我是基于 UE 4.25] 英文原地址 在本教程中,创建一个新的 C++ 类,继承 UPawnMovementComponent 的父类,并将其命名为Collid ...

  10. Silverlight C# 游戏开发:L2 自定义模型导入

    Balder的Geometries里提供了很多的已有的模型,比如立方体.圆柱等等,但是我们在开发游戏的时候大多情况下都是使用3D设计工具制作自定义的3D模型,而本篇则介绍的是如何导入显示一个自定义的3 ...

最新文章

  1. 独家 | 基于数据预测的解释真的能增加用户对人工智能的信任吗?(附链接)...
  2. Java 并发编程笔记(一)
  3. jquery中的DOM操作集锦
  4. python xlsxwriter 画图_Python XlsxWriter模块Chart类用法实例分析
  5. 最全Linux安装Redis最新版
  6. no number java_java.lang.NumberFormatException问题!!!
  7. Linux下的基础命令介绍(二)
  8. Exchange2013/2016 ECP/OWA无法通过用户验证EventID3002/3005
  9. 你确认退出吗 html,按退出会 执行2次弹出确认窗口,为何?
  10. php lwm2m,理解COAP/LWM2M/MQTT协议和TCP/UDP协议的关系
  11. 按键脚本c语言,按键精灵脚本代码大全 按键精灵命令使用方法
  12. MarkDown下载以及入门语法(一)
  13. 我的世界java版如何装mod_《我的世界》怎么装mod 安装方法教程
  14. 微信开发工具 git代码管理
  15. 高通平台耳机类型识别
  16. 并行网络测试软件,并行程序测试
  17. 单片机 脉搏心率检测 MSP430G2553 Pulse Sensor 红外对射
  18. 只用显示器连接云服务器,显示器连接云服务器
  19. 情报分析-diamond_threat_model
  20. 计算机重启遇到你的账户已被停用,win10 administrator你的账户已被停用怎么办

热门文章

  1. matlab保存每次循环的结果
  2. 开发利器--JSONVIEW插件 网页json数据直接转换
  3. Flutter实战之顶部导航栏以及ListView简单应用
  4. 竟还有这样的代码注释我笑喷了
  5. java 代码重排_Java中指令重排
  6. java代码表示非空链表整数_Leetcode: Topic 2 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的.......
  7. python最小生成树算法_最小生成树:Kruskal算法及python实现
  8. java comparable与_Java中Comparable和Comparator区别
  9. 类图中表达总体与局部的关系_软件工程测试题3
  10. github中文版_GitHub 上的 Awesome 系列(资源大全系列)