博客> 粒子系统
粒子系统
2017-10-20 01:34 评论:2 阅读:839 幻空缥缈
ios 粒子 CAEmitterCell

iOS的粒子系统是通过CAEmitterCell创建,然后通过CAEmitterLayer发射层进行发射。 导入框架#import <QuartzCore>

- 下面介绍CAEmitterCell的基本属性

1.+ (instancetype)emitterCell; UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。

2.@property(nullable) CGColorRef color; 粒子的颜色

3.@property float alphaRange; 一个粒子的颜色alpha能改变的范围

4.@property float alphaSpeed; 粒子透明度在生命周期内的改变速度

5.@property float redRange; @property float greenRange; @property float blueRange; 一个粒子的颜色blue,green,red能改变的范围

6.@property float redSpeed; @property float greenSpeed; @property float blueSpeed; 一个粒子blue,green,red在生命周期内改变的速度

7.@property(nullable, strong) id contents; 粒子要展现的图片,CGImageRef类型,否则不显示

8.@property CGRect contentsRect; 渲染的范围

9.@property CGFloat emissionLatitude; 发射Z轴方向的发射角度

10.@property CGFloat emissionLongitude; 粒子在xy平面的发射角度

11.@property CGFloat emissionRange; 粒子发射角度的容差

12.@property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; 粒子发射的粒子

13.@property(getter=isEnabled) BOOL enabled; 粒子是否允许发射器渲染

14.@property float lifetime; 粒子生存时间

15.@property float lifetimeRange; 粒子生存时间范围,设置之后 lifetime +/-= lifetimeRange

16.@property(copy) NSString *minificationFilter; @property(copy) NSString *magnificationFilter; 减小,增加自己的大小

17.@property float minificationFilterBias; 减少大小的因子

18.@property(nullable, copy) NSString *name; 粒子的名字

19.@property CGFloat scale; 粒子缩放大小

20.@property CGFloat scaleRange; 粒子缩放范围

21.@property CGFloat scaleSpeed; 粒子缩放速度

22.@property CGFloat spin; 旋转角度

23.@property CGFloat spinRange; 旋转角度范围

24.@property CGFloat velocity; 粒子的速度

25.@property CGFloat velocityRange; 粒子速度范围

26.@property CGFloat xAcceleration; @property CGFloat yAcceleration; @property CGFloat zAcceleration; 粒子在x,y,x方向的加速度

- 发射层CAEmitterLayer属性

1.+ (instancetype)layer; 由很多emitterCell组成的发射层,控制粒子的形状,发射位置,提供了一个粒子发射器系统为核心的动画

2.@property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; 装着CAEmitterCell对象的粒子单元数组,被用于把粒子投放到layer上

3.@property CGPoint emitterPosition; 发射器在xy平面的中心位置

4.@property CGFloat emitterZPosition; 发射器的Z平面位置

5.@property CGSize emitterSize; 发射器的尺寸大小

6.@property CGFloat emitterDepth; 发射器的深度,在某些模式下会产生立体效果

7.@property(copy) NSString *emitterMode; 发射模式

kCAEmitterLayerPoints 从发射器中发出 kCAEmitterLayerOutline 从发射器边缘发出 kCAEmitterLayerSurface 从发射器表面发出 kCAEmitterLayerVolume 从发射器中点发出

8.@property(copy) NSString *emitterShape; 发射器的形状

kCAEmitterLayerPoint 点的形状,粒子从一个点出发 kCAEmitterLayerLine 线的形状,粒子从一条线出发 kCAEmitterLayerRectangle 矩形形状,粒子从一个矩形出发 kCAEmitterLayerCuboid 立方体形状,会影响Z平面的效果 kCAEmitterLayerCircle 圆形,粒子会在圆形范围发射 kCAEmitterLayerSphere 球形

9.@property(copy) NSString *renderMode; 渲染模式

kCAEmitterLayerUnordered 这种模式下,粒子是无序出现的,多个发射源将混合 kCAEmitterLayerOldestFirst 这种模式下,生命久的粒子会被渲染在最上层 kCAEmitterLayerOldestLast 这种模式下,年轻的粒子会被渲染在最上层 kCAEmitterLayerBackToFront 这种模式下,粒子的渲染按照Z轴的前后顺序进行 kCAEmitterLayerAdditive 这种模式会进行粒子混合

10.@property BOOL preservesDepth; 是否开启三维空间效果

11.@property float birthRate; 粒子产生速度 默认为1.0

12.@property float lifetime; 粒子存活时间,默认为1s

13.@property float scale; 粒子的缩放大小

14.@property unsigned int seed; 用于初始化随机数产生的粒子

15.@property float spin; 粒子的旋转位置

16.@property float velocity; 粒子的运动速度

写几行代码用起来

CAEmitterLayer *fireEmitter = [CAEmitterLayer layer];
fireEmitter.emitterPosition = CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height - 60);
fireEmitter.emitterSize = CGSizeMake( 50, 0);
fireEmitter.emitterShape = kCAEmitterLayerLine;
fireEmitter.renderMode  = kCAEmitterLayerAdditive;
//火焰
CAEmitterCell* fire = [CAEmitterCell emitterCell];
[fire setName:@"fire"];

fire.birthRate   = 500;
fire.emissionLongitude  = M_PI;
fire.velocity   = -80;
fire.velocityRange  = 30;
fire.emissionRange  = 1.1;
fire.yAcceleration  = -200;
fire.scaleSpeed   = 0.3;
fire.lifetime   = 1;
fire.lifetimeRange  = 0.35;

fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor];
fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage];

//烟雾
CAEmitterCell* smoke = [CAEmitterCell emitterCell];
[smoke setName:@"smoke"];

smoke.birthRate   = 11;
smoke.lifetime   = 4;
smoke.velocity   = -40;
smoke.velocityRange  = 20;
smoke.emissionRange  = M_PI / 4;
smoke.spinRange   = 6;
smoke.yAcceleration  = -160;
smoke.scale    = 0.1;
smoke.alphaSpeed  = -0.12;
smoke.scaleSpeed  = 0.7;

smoke.contents   = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage];
smoke.color = [[UIColor colorWithWhite:0.5 alpha:0.3]CGColor];

fireEmitter.emitterCells = @[smoke,fire];
[self.view.layer addSublayer:fireEmitter];

产生火焰效果

收藏
1
sina weixin mail 回到顶部