CAEmitterLayer

不羁岁月 提交于 2020-03-26 06:38:30

-(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:粒子速度

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!