Objective-c粒子動畫,objective-c粒子

來源:互聯網
上載者:User

Objective-c粒子動畫,objective-c粒子

        前面貼過幾篇關於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;//kCAEmitterLayerRectangle24     25     //發射模式26     flakeLayer.emitterMode    =kCAEmitterLayerSurface;// kCAEmitterLayerOutline27 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 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.