-(void)createFireworks{

CAEmitterLayer *fireworks = [CAEmitterLayer layer];

fireworks.emitterPosition = CGPointMake(Width/2, Height-30);

fireworks.emitterSize = CGSizeMake(100, 100);

fireworks.emitterMode = kCAEmitterLayerOutline;

fireworks.emitterShape = kCAEmitterLayerLine;

fireworks.renderMode = kCAEmitterLayerAdditive;

fireworks.seed = (arc4random() % 100) + 1;

//ROCKET

CAEmitterCell *rocket = [CAEmitterCell emitterCell];

rocket.birthRate = 0.5;//发射粒子的间隔时间

rocket.emissionRange = 0.25 * M_PI;

rocket.velocity = 480;//粒子飞行速度

rocket.velocityRange = 100;//曝发范围

rocket.yAcceleration = 75;

rocket.lifetime = 1.02;//粒子曝发次数

rocket.contents = (id)[UIImage imageNamed:@"1"].CGImage;

rocket.scale = 0.2;//粒子包括曝发后的子粒子的大小

rocket.color = [UIColor redColor].CGColor;

rocket.greenRange = 1.0;//粒子的绿色RBG值变化范围

rocket.redRange = 1.0;//粒子的红色RBG值变化范围

rocket.blueRange = 1.0;//粒子的蓝色RBG值变化范围

rocket.spinRange = M_PI;

//曝发

CAEmitterCell *burst = [CAEmitterCell emitterCell];

burst.birthRate = 1.0;

burst.velocity = 0;

burst.scale = 2.5;

burst.redRange = 1.5;

burst.greenRange = 1.5;

burst.blueRange = 1.5;

burst.lifetime = 0.35;

//火花

CAEmitterCell *spark = [CAEmitterCell emitterCell];

spark.birthRate = 400;//粒子参数的乘数因子

spark.velocity = 125;

spark.emissionRange = M_PI_2;//发射的角度

spark.yAcceleration = 75;

spark.lifetime = 3;

spark.contents = (id)[UIImage imageNamed:@"2"].CGImage;

spark.scaleRange = -0.2;//缩放比例范围

spark.greenRange = 1.0;

spark.redRange = 1.0;

spark.blueRange = 1.0;

spark.alphaRange = -0.25;

spark.spin = M_PI_2;

spark.spinRange = M_PI_2;//子旋转角度范围

fireworks.emitterCells = @[rocket];

rocket.emitterCells = @[burst];

burst.emitterCells = @[spark];

[self.view.layer addSublayer:fireworks];

}

代码设置/结构说明:

1、CAEmitterCell

CAEmitterCell *effectCell = [CAEmitterCell emitterCell];

effectCell 几个重要属性:

1).birthRate 顾名思义没有这个也就没有effectCell,这个必须要设置,具体含义是每秒某个点产生的effectCell数量

2).lifetime & lifetimeRange 表示effectCell的生命周期,既在屏幕上的显示时间要多长。

3).contents 这个和CALayer一样,只是用来设置图片

4).name 这个是当effectCell存在caeEmitter 的emitterCells中用来辨认的。用到setValue forKeyPath比较有用

5).velocity & velocityRange & emissionRange 表示cell向屏幕右边飞行的速度 & 在右边什么范围内飞行& +-角度扩散

6).把cell做成array放进caeEmitter.emitterCells里去。caeEmitter.renderMode有个效果很不错,能变成火的就是kCAEmitterLayerAdditive

属性:

alphaRange:  一个粒子的颜色alpha能改变的范围;

alphaSpeed:粒子透明度在生命周期内的改变速度;

birthrate:粒子参数的速度乘数因子;

blueRange:一个粒子的颜色blue 能改变的范围;

blueSpeed: 粒子blue在生命周期内的改变速度;

color:粒子的颜色

contents:是个CGImageRef的对象,既粒子要展现的图片;

contentsRect:应该画在contents里的子rectangle:

emissionLatitude:发射的z轴方向的角度

emissionLongitude:x-y平面的发射方向

emissionRange;周围发射角度

emitterCells:粒子发射的粒子

enabled:粒子是否被渲染

greenrange: 一个粒子的颜色green 能改变的范围;

greenSpeed: 粒子green在生命周期内的改变速度;

lifetime:生命周期

lifetimeRange:生命周期范围

magnificationFilter:不是很清楚好像增加自己的大小

minificatonFilter:减小自己的大小

minificationFilterBias:减小大小的因子

name:粒子的名字

redRange:一个粒子的颜色red 能改变的范围;

redSpeed; 粒子red在生命周期内的改变速度;

scale:缩放比例:

scaleRange:缩放比例范围;

scaleSpeed:缩放比例速度:

spin:子旋转角度

spinrange:子旋转角度范围

style:不是很清楚:

velocity:速度

velocityRange:速度范围

xAcceleration:粒子x方向的加速度分量

yAcceleration:粒子y方向的加速度分量

zAcceleration:粒子z方向的加速度分量

2、CAEmitterLayer

CAEmitterLayer提供了一个基于Core Animation的粒子发射系统,粒子用CAEmitterCell来初始化。粒子画在背景层盒边界上

属性:

birthRate:粒子产生系数,默认1.0;

emitterCells: 装着CAEmitterCell对象的数组,被用于把粒子投放到layer上;

emitterDepth:决定粒子形状的深度联系:emittershape

emitterMode:发射模式

NSString * const kCAEmitterLayerPoints;

NSString * const kCAEmitterLayerOutline;

NSString * const kCAEmitterLayerSurface;

NSString * const kCAEmitterLayerVolume;

 

emitterPosition:发射位置

emitterShape:发射源的形状:

NSString * const kCAEmitterLayerPoint;

NSString * const kCAEmitterLayerLine;

NSString * const kCAEmitterLayerRectangle;

NSString * const kCAEmitterLayerCuboid;

NSString * const kCAEmitterLayerCircle;

NSString * const kCAEmitterLayerSphere;

 

emitterSize:发射源的尺寸大;

emitterZposition:发射源的z坐标位置;

lifetime:粒子生命周期

preservesDepth:不是多很清楚(粒子是平展在层上)

renderMode:渲染模式:

NSString * const kCAEmitterLayerUnordered;

NSString * const kCAEmitterLayerOldestFirst;

NSString * const kCAEmitterLayerOldestLast;

NSString * const kCAEmitterLayerBackToFront;

NSString * const kCAEmitterLayerAdditive;

scale:粒子的缩放比例:

seed:用于初始化随机数产生的种子

spin:自旋转速度

velocity:粒子速度

CAEmitterLayer的更多相关文章

  1. CAEmitterLayer实现雪花效果

    CAEmitterLayer 简介 在iOS5.0中,Apple引入了CAEmitterLayer层,CAEmitterLayer是一个高性能的粒子效果引擎,被用来创建实时粒子动画,如:烟雾,火,雨等 ...

  2. 关于粒子发射(CAEmitterLayer)

    技术是条长而远的路,只有不断学习丰富自己的技能才能让自己行走在路上! CAEmitterCell CAEmitterCell: CAEmitterCell是粒子发射系统里的粒子,用CAEmitterC ...

  3. CAEmitterLayer 粒子发射Layer的相关属性

    emitterCells:CAEmitterCell对象的数组,被用于把粒子投放到layer上 birthRate:可以通俗的理解为发射源的个数,默认1.0.当前每秒产生的真实粒子数为=CAEmitt ...

  4. iOS - CAEmitterLayer流星

    效果图: 流星: #pragma mark - loading animation - (void)showLoadingAnimation { CGRect mainBounds = [[UIScr ...

  5. iOS - CAEmitterLayer 学习笔记一

    其他参考博客: http://my.oschina.net/u/2340880/blog/485095 http://www.cnblogs.com/YouXianMing/p/3785876.htm ...

  6. 能产生粒子效果的CAEmitterLayer

    能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...

  7. ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo(转)

    转载自:http://blog.csdn.net/mad2man/article/details/16898369 分类: cocoa SDK2013-11-23 11:52 388人阅读 评论(0) ...

  8. 使用CAEmitterLayer实现下雪效果

    效果图: 代码部分: #import "ViewController.h" @interface ViewController () @end @implementation Vi ...

  9. 使用CAEmitterLayer产生粒子效果

    ViewController.m #import "ViewController.h" @implementation ViewController - (void)viewDid ...

随机推荐

  1. wpf 依赖性属性

    1 依赖性属性的作用 在WPF体系中,只有定义属性为依赖项属性,这个属性才支持样式设置,数据绑定,继承,动画和默认值.也就是 这个属性才能具有WPF中的一些特点. 它支持自动通知UI控件. WPF的属 ...

  2. 【CF】556D A Lot of Games

    构建trie树,可以得到4类结点:必胜点,必负点,完全主宰点(可胜可负),完全无法主宰点(无法控制最终胜负).递归到叶子结点,即为必胜点,回溯分情况讨论.注意叶子结点使用属性n来控制,n表示当前结点的 ...

  3. nginx+tomcat配置https

    nginx代理https后,应用redirect https变成http,很多页面报404.情况类似http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.ht ...

  4. suse linux 编译安装Apache时报“APR NOT FOUND”的解决方法

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  5. 【狼】unity3d collision获取碰撞的点的位置

    void OnCollisionEnter(Collision ctl) { ContactPoint contact = ctl.contacts[]; Quaternion rot = Quate ...

  6. .net开源工作流引擎ccflow

    关于济南驰骋信息技术有限公司的.net开源工作流引擎 驰骋工作流引擎,工作流程管理系统:简称ccflow,驰骋一体化解决方案简称ccport. ccflow是济南驰骋信息技术有限公司向社会提供的一款1 ...

  7. asp 数组

    定义简单数组 有两种方法在asp中定义和初始化数组,让我们看看每种的例子: 方法一:MyArray = Array("Jan","Feb","Mar& ...

  8. CPP数组

    数组为函数参数,求出一组数中的最大者;

  9. Intersection - POJ 1410(线段与矩形是否相交)

    题目大意:给一个线段和一个矩形,判断线段是否和矩形有公共点.   分析:用矩形的四个边当线段判断与所给的线段是否有交点,需要注意的是给的矩形是不标准的,需要自己转换,还需要注意线段有可能在矩形内部. ...

  10. UVA 10494 (13.08.02)

    点此连接到UVA10494 思路: 采取一种, 边取余边取整的方法, 让这题变的简单许多~ AC代码: #include<stdio.h> #include<string.h> ...