公司做了一个类似小游戏的项目,背景需要放个流星雨效果粒子动画,详细的不多说,主要自己纪录学习,上代码。
-(void)setupCAEmitterLayer{
CAEmitterLayer *rockEmitter = [CAEmitterLayer layer];
//发射源位置
rockEmitter.emitterPosition = CGPointMake(SCREENWIDTH, 0);
rockEmitter.emitterSize = CGSizeMake(SCREENWIDTH, 0);
rockEmitter.emitterShape = kCAEmitterLayerLine;
rockEmitter.emitterMode = kCAEmitterLayerOutline;
rockEmitter.renderMode = kCAEmitterLayerOldestLast;
CAEmitterCell *rock = [CAEmitterCell emitterCell];
rock.birthRate = 10 ;
rock.lifetime = 6;
//粒子透明速度
rock.alphaSpeed = -0.1;
//粒子速度
rock.velocity = 280;
rock.velocityRange = 100;
//角度
// rock.emissionRange = 0;
rock.emissionLongitude = - 3*M_PI_4;
rock.emissionRange = -M_PI_4/2;
rock.contents = (id)[[UIImage imageNamed:@"rocktest"] CGImage];
rock.scaleRange = 0.5;
rock.scale = 0.5;
rockEmitter.emitterCells = [NSArray arrayWithObjects:rock, nil];
// [rockEmitter setValue:@500 forKeyPath:@"emitterCells.explosion.birthRate"];
// rockEmitter.transform = CATransform3DMakeRotation(-M_PI/4, 0, 0, 1);
[self.view.layer addSublayer:rockEmitter];
self.rockEmitter = rockEmitter;
}
具体的不多说,网上好多大神们比我的详细,具体有几点注意的想提一下
1.是layer层动画,可以和transform3D结合使用,但具体都理解发射源,发射模式这两个概念就可以了
2.有range后缀的都是范围变量,例如速度的变量,角度的变量
3.增加的方式是发射源的一个属性emitterCells 添加粒子,可以添加很多种不同的粒子
4.粒子的速度cell.velocity是发射方向cell.emissionLongitude上的速度
差不多这几点要注意的.纪录下来,待跟新....
网友评论