zoukankan      html  css  js  c++  java
  • CAEmitterLayer

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

  • 相关阅读:
    Exchanger
    信号量Semaphore
    CountDownLatch
    Condition
    WCF接口实例介绍
    时间显示
    pymysql-execute
    python之迭代器与生成器
    python之装饰器
    python之函数
  • 原文地址:https://www.cnblogs.com/nenhallgg/p/5305114.html
Copyright © 2011-2022 走看看