zoukankan      html  css  js  c++  java
  • Objective-c粒子动画

           

    本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址

    https://www.baiydu.com

         前面贴过几篇关于SpriteKit的案例文章,其中涉及到的动画都是材质类的图片切换或则常规的动画效果,没涉及到今天要说的粒子动画,今天说的粒子动画就是在游戏中实现更佳炫酷的效果必须使用的类,OC中粒子动画主要涉及到两个类,CAEmitterLayer,CAEmitterCell,第一个是动画的执行类,第二个是动画的实现类,虽只有两个类,属性也不多,但是想要理解这两个类,并且灵活运用它们还是有一定难度的。应为粒子动画在游戏开发中算是最难的技术了,当前比较火的游戏开发框架,大多粒子动画效果都是用工具制作,比如3dmax这样的工具,虽然oc把实现粒子动画的类优化得很容易很简单,但是难度还是有的,不好理解。我接下去的步骤就是先解释下这两个类,然后会贴上一个对每句代码都详细解释过的案例。

     一、涉及类

    1、CAEmitterLayer(粒子动画执行类,这里你把它想成是实现粒子动画的导演类)
    /* The array of emitter cells attached to the layer. Each object must
    * have the CAEmitterCell class. */
    这个数组是这个层的附加发射器层, 每个对象必须至少有一个粒子类,
    @property(nullable, copy) NSArray<CAEmitterCell *> *emitterCells;

    2、CAEmitterCell(粒子类,这个类可以想成是粒子动画实现类,用它来实现粒子动画后,放入到CAEmitterLayer中去执行)

     二、详细案例

     1 @interface SnowViewController ()
     2 
     3 @end
     4 
     5 @implementation SnowViewController
     6 
     7 - (void)viewDidLoad
     8 {
     9     [super viewDidLoad];
    10  
    11     flakeLayer = [CAEmitterLayer layer];
    12    
    13     
    14     CGRect bounds = [[UIScreen mainScreen] bounds];
    15     
    16     //下面是设置发射器在屏幕上的位置,
    17     flakeLayer.emitterPosition = CGPointMake(bounds.size.width / 2, bounds.size.height/3);
    18     
    19     /*下面是发射器的size,决定了粒子的出生位置范围。比如下面的设置为0,0那么所有的粒子出生轨迹起点都将是发射器的中心点,你可以想成是模拟器的中心点   可以把这个范围与emitterShape属性结合来想*/
    20     flakeLayer.emitterSize = CGSizeMake(0,0);
    21     
    22     // 发射模型决定出生粒子的运动轨迹显示的形状
    23     flakeLayer.emitterShape =kCAEmitterLayerLine;//kCAEmitterLayerRectangle
    24     
    25     //发射模式
    26     flakeLayer.emitterMode    =kCAEmitterLayerSurface;// kCAEmitterLayerOutline
    27 
    28     
    29     //申明一个粒子类
    30     CAEmitterCell *flakeCell = [CAEmitterCell emitterCell];
    31     //是个CGImageRef的对象,既粒子要展现的图片
    32     flakeCell.contents = (id)[[UIImage imageNamed:@"FFFlake.png"] CGImage];
    33     //每秒出生的粒子数量
    34     flakeCell.birthRate = 100;
    35     //生命周期 1.2秒之后消失
    36     flakeCell.lifetime = 120.0;
    37     //生命周期范围
    38     flakeCell.lifetimeRange = 0.5;
    39     //速度//粒子从出生到运动轨迹的终点速的速度,如果这里指设置很大那么屏幕的粒子就会增多,出生率就会加快
    40     flakeCell.velocity = 100;
    41     //速度范围
    42     flakeCell.velocityRange = 10;
    43     //粒子y方向的加速度分量--向 粒子y轴方向移动
    44     flakeCell.xAcceleration = 10;
    45     // upx-y平面的发射方向  ....>> emissionLatitude:发射的z轴方向的角度
    46     flakeCell.emissionLongitude = -M_PI / 2;
    47     // 发射器在一个范围内的随机发射角度,这里如果设置为0那么,发射器的角度就会固定,如果设置为圆周率,那么出生粒子的发射范围就会在360度范围内随机发射粒子角度
    48     flakeCell.emissionRange = M_PI ;
    49     
    50     //这里代表粒子出生后完成运动轨迹中带的效果,如果是0那么在生命周期内就会以平滑的形式移动,假如这里我们设置为
    51     //360那么 在生命周期内它就会旋转的形式移动
    52     flakeCell.spinRange        =0;
    53 
    54     
    55     flakeCell.scale = 1.0;//缩放比例:
    56     flakeCell.scaleSpeed = 0.1;//1.0;//缩放比例速度
    57     flakeCell.scaleRange = 1.0;//缩放比例范围;
    58     
    59     flakeCell.color = [[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1.0] CGColor];//粒子的颜色
    60     flakeCell.redRange = 1.0;//一个粒子的颜色red 能改变的范围;
    61     flakeCell.redSpeed = 0.1;//粒子red在生命周期内的改变速度;
    62     flakeCell.blueRange = 1.0;//一个粒子的颜色blue 能改变的范围
    63     flakeCell.blueSpeed = 0.1;//粒子blue在生命周期内的改变速度
    64     flakeCell.greenRange = 1.0;//个粒子的颜色green 能改变的范围;
    65     flakeCell.greenSpeed = 0.1;//粒子green在生命周期内的改变速度;
    66     flakeCell.alphaSpeed = -0.08;//粒子透明度在生命周期内的改变速度
    67     
    68     flakeLayer.emitterCells = [NSArray arrayWithObject:flakeCell];//粒子发射的粒子
    69     
    70      [self.view.layer insertSublayer:flakeLayer atIndex:0];
    71     
    72 }

    本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

     

  • 相关阅读:
    比较字符串
    angular 兼容ie7 bootstrap2兼容ie6
    angular $watch
    CSS超过指定的宽度加省略号
    出去html中的标签
    andriod自定义视图
    andriod创建用户界面(1)
    安卓Activity生命周期(转)
    迷你版mvc框架执行过程
    【03月04日】A股滚动市盈率PE历史新低排名
  • 原文地址:https://www.cnblogs.com/xiaoliao/p/5908491.html
Copyright © 2011-2022 走看看