iOS开发-iOS粒子发射器开发-iOS粒子下雨打雷天气开发-CAEmitterLayer粒子发射器-CAEmi(2)

电脑杂谈  发布时间:2019-08-25 21:05:47  来源:网络整理

看着代码很烦人是吧?把我们前面的 emitterLayer 和 showCell 结合在一起,就是一个完整的粒子发射过程了,给大家看看效果:

在这里插入图片描述

其实实现的效果比较简洁,但一定要自己去尝试下面代码中,那些注释了的东西。

ios下雪下雨的_梦见下雨下雪了_先梦见下雪然后在下雨

接下来继续,下雨效果,大家来想想下雨效果是什么样子呢?粒子应该从什么位置发射?应该怎么配置?

思考结束,我们继续:

    // 创建粒子发射器图层
    CAEmitterLayer * rainEmitterLayer = [CAEmitterLayer layer];
    // 设置属性
    // 发射源的形状 是枚举类型  ⭐️因为是下雨 所以要作为 直线发射
    rainEmitterLayer.emitterShape = kCAEmitterLayerLine;
    // 发射模式 从表面发射
    rainEmitterLayer.emitterMode = kCAEmitterLayerSurface;
    // 发射源的size 据定了发射源的大小 设定发射器大小为整个屏幕的大小
    rainEmitterLayer.emitterSize = self.view.frame.size;
    // 发射源的位置 ⭐️因为是下雨 所以要从屏幕上方往下发射(如果想让粒子占据整个屏幕的宽度,设定位置宽度为视图的一半)
    rainEmitterLayer.emitterPosition = CGPointMake(self.view.frame.size.width*0.5, -20);
    // 渲染模式,暂不使用 ⭐️很不常用
    
    // 添加到目标视图的layer上
    [self.view.layer addSublayer:rainEmitterLayer];
    
    // 配置粒子Cell
    CAEmitterCell * rainCell = [CAEmitterCell emitterCell];
    // 设置粒子图片
    rainCell.contents = (id)[[UIImage imageNamed:@"rain"]CGImage];
    
    // 可以以分组的形式来记忆粒子的设定如下:
    // 组1 ⭐️三个参数缺一不可
    // 设置粒子产生率 每秒 60个 ⭐️粒子产生率可以通过 EmitterLayer 来控制
    rainCell.birthRate = 60.f;
    // 设置粒子生命周期 生命周期 40秒
    rainCell.lifetime = 40.f;
    // 设置粒子持续时间,持续时间制约粒子生命周期
    rainCell.speed = 5.f;
    
    // 组2
    // 设置粒子速度
    rainCell.velocity = 20.f;
    // 设置粒子速度范围
    rainCell.velocityRange = 100.f;
    // 设置粒子下落加速度 Y轴
    rainCell.yAcceleration = 2000.f;
    
    // 组3 雨图片需要缩放统一大小 不能使用范围
    // 设置缩放比例
    rainCell.scale = 0.05f;
//    // 设置缩放范围
//    rainCell.scaleRange = 0.8f;
//    // 设置粒子存在期间缩放变化的速度
//    rainCell.scaleSpeed = 0.5f;
    
//    // 组4 雨点不需要旋转
//    // 设置粒子旋转速度
//    rainCell.spin = 0.5f;
//    // 设置粒子旋转范围
//    rainCell.spinRange = M_PI_2;
    
    // 设置粒子颜色 会附和图片修改图片颜色
    rainCell.color = [[UIColor whiteColor]CGColor];
    
    // 添加到粒子发射器
    rainEmitterLayer.emitterCells = @[rainCell];

运行效果如下:

在这里插入图片描述

我们可以稍加改进,比如绵绵细雨,试想一下,怎么能够做到往一个方向倾斜的呢?我们正常的加速度是:yAcceleration,用来设定粒子下落加速度(Y轴),如果想要倾斜,我们就加上xAcceleration,也就是X轴加速度。运行效果如下:

在这里插入图片描述

这时候新的难题来了,我们会看到ios下雪下雨的,下雨覆盖不满屏幕了这是为什么呢?之前说了 EmitterLayer 设置属性有:

①发射源的size 据定了发射源的大小 EmitterLayer.emitterSize 目前我们的size是屏幕尺寸,即使我们把雨弄倾斜了,发射源的大小和下落位置的大小还是屏幕尺寸,这时候我们就应该调整 EmitterLayer 的父 layer 的 View 的大小了,宽度变成 2 倍。

②发射源的位置 EmitterLayer.emitterPosition,之前我们学习到了如果想让粒子占据整个屏幕的长度,设定位置尺寸为视图的一半,这时候也相同。

通过以下两个步骤,倾斜的雨点就会布满整个屏幕了

先梦见下雪然后在下雨_梦见下雨下雪了_ios下雪下雨的

好了,我们继续来学习下雪效果,之前下雨效果已经完成了,下雪就很简单啦,直接上代码:

    // 设置发射器图层
    CAEmitterLayer * snowEmitterlayer = [CAEmitterLayer layer];
    // 发射源的形状 是枚举类型 ,因为是下雨 所以要作为 直线发射
    snowEmitterlayer.emitterShape = kCAEmitterLayerLine;
    // 发射模式
    snowEmitterlayer.emitterMode = kCAEmitterLayerSurface;
    // 发射源的size 据定了发射源的大小
    snowEmitterlayer.emitterSize = self.view.frame.size;
    // 发射源的位置 从屏幕上方往下发射
    snowEmitterlayer.emitterPosition = CGPointMake(self.view.frame.size.width*0.5, -10);
    // 渲染模式,暂不使用
    
    [seslf.view.layer addSublayer:snowEmitterlayer];
    
    // 创建粒子
    CAEmitterCell * snowCell = [CAEmitterCell emitterCell];
    // 设置粒子图片
    snowCell.contents = (id)[[UIImage imageNamed:@"snow@3x"]CGImage];
    
    // 组1
    // 设置粒子产生率
    snowCell.birthRate = 10.f;
    // 设置粒子生命周期
    snowCell.lifetime = 40.f;
    // 设置粒子持续时间,持续时间制约粒子生命周期
    snowCell.speed = 5.f;
    
    // 组2
    // 设置粒子速度
    snowCell.velocity = 20.f;
    // 设置粒子速度范围
    snowCell.velocityRange = 100.f;
    // 设置粒子下落加速度 Y轴
    snowCell.yAcceleration = 80.f;
    
    // 组3 雪花图片 需要缩放大小 使用缩放范围
    // 设置缩放比例
    snowCell.scale = 0.2f;
    // 设置缩放范围
    //    snowCell.scaleRange = 0.5f;
    //    // 设置粒子存在期间缩放变化的速度
    //    snowCell.scaleSpeed = 0.5f;
    
    // 组4 雨点不需要旋转
    // 设置粒子旋转速度
    //    snowCell.spin = 0.5f;
    //    // 设置粒子旋转范围
    //    snowCell.spinRange = M_PI_2;
    
    // 设置粒子颜色 会附和图片修改图片颜色
//    snowCell.color = [[UIColor redColor]CGColor];
    
    // 添加到粒子发射器
    snowEmitterlayer.emitterCells = @[snowCell];

运行效果如图:

在这里插入图片描述

开起来很单调是吧?我们来使用几个属性,让下雪变得好看吧:

①设置粒子缩放范围 snowCell.scaleRange

②设置粒子存在期间缩放变化的速率 snowCell.scaleSpeed

③设置粒子旋转速率 snowCell.spin

④设置粒子旋转范围snowCell.spinRange

如果想修改大雪我们就减少Y轴加速度,图片展现了以下两个修改,运行效果如图:

在这里插入图片描述

梦见下雨下雪了_先梦见下雪然后在下雨_ios下雪下雨的

在上文的学习中,我们发现了CAEmitterCell的特点,即:CAEmitterCell也可以发射CAEmitterCell,现在就来给大家准确展示一下:

    // 配置layer
    CAEmitterLayer * fireworksLayer = [CAEmitterLayer layer];
    [self.view.layer addSublayer:fireworksLayer];
    
    // 发射源大小 
    fireworksLayer.emitterSize = CGSizeMake(self.view.layer.bounds.size.width * 0.1, 0.f);
    // 发射位置 在底部向上发射
    fireworksLayer.emitterPosition = CGPointMake(self.view.layer.bounds.size.width * 0.5, self.view.layer.bounds.size.height);
    // 以直线发射
    fireworksLayer.emitterShape = kCAEmitterLayerLine;
    // 在指定位置的表面发射
    fireworksLayer.emitterMode = kCAEmitterLayerSurface;
    // 渲染效果,叠加高亮
    fireworksLayer.renderMode = kCAEmitterLayerAdditive;
    
    // 发射粒子效果
    CAEmitterCell * shootCell = [CAEmitterCell emitterCell];
    shootCell.name = @"shootCell";
    // 粒子产生率 1秒一个
    shootCell.birthRate = 2.f;
    // 粒子存在时间 1.02 上一个销毁了下一个再发出来
    shootCell.lifetime = 1.02f;
    
    // 粒子速度和速度范围 默认是发射模式方向的加速度⭐️
    shootCell.velocity = 600.f;
    shootCell.velocityRange = 100.f;
    // Y方向的加速度 模拟重力影响 发射会感受收到向下的阻碍
    shootCell.yAcceleration = 150.f;
    
    // 发射角度范围 看着更像是到处在放烟火
					


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-120576-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...