Swift 粒子動(dòng)畫CAEmitterLayer簡單使用

粒子系統(tǒng)介紹

  • 什么是粒子系統(tǒng)?

    • 粒子系統(tǒng)是由總體具有相同的表現(xiàn)規(guī)律,個(gè)體卻隨機(jī)表現(xiàn)出不同的特征的大量顯示元素構(gòu)成的集合。
  • 粒子定義有三要素

    • 群體性:粒子系統(tǒng)是由“大量顯示元素”構(gòu)成的(例如雪、雨、一團(tuán)霧等等)
    • 統(tǒng)一性:粒子系統(tǒng)的每個(gè)元素具有相同的表現(xiàn)規(guī)律(例如下雨、下雪,方向都是從上向下)
    • 隨機(jī)性:粒子系統(tǒng)的每個(gè)元素又隨機(jī)表現(xiàn)出不同特征(例如下雪,每個(gè)雪花下落的速度會(huì)有不同,大小會(huì)有不同、方向也會(huì)有略微的不同)

粒子系統(tǒng)應(yīng)用場(chǎng)景

  • 影視行業(yè)
    • 目前我們經(jīng)常看的大片,比如沙塵暴、暴風(fēng)雨、暴雪、煙花 等等,很多都是粒子特效做出來的。很逼真,而且相比真實(shí)世界中去實(shí)拍,成本要低很多
  • 游戲中
    • 爆炸、雨、雪、霧、煙花等等。都是粒子系統(tǒng)實(shí)現(xiàn)
  • 應(yīng)用中
    • 主播房間右下角粒子動(dòng)畫
    • 雪花/下雨/煙花等效果
    • QQ生日快樂一堆表情的跳動(dòng)

粒子系統(tǒng)的使用

  • 步驟
    • 創(chuàng)建發(fā)射器
    • 創(chuàng)建粒子, 設(shè)置粒子屬性
  • 代碼
protocol Emitterable {
    
}

extension Emitterable where Self : UIViewController {
    
    func startEmittering(_ point : CGPoint) {
        // 1.創(chuàng)建發(fā)射器
        let emitter = CAEmitterLayer()
        
        // 2.設(shè)置發(fā)射器的位置
        emitter.emitterPosition = point
        
        // 3.開啟三維效果
        emitter.preservesDepth = true
        
        // 4.創(chuàng)建粒子, 并且設(shè)置例子相關(guān)的屬性
        let cell = CAEmitterCell()
        
        // 4.2.設(shè)置粒子速度
        cell.velocity = 150
        cell.velocityRange = 100
        
        // 4.3.設(shè)置例子的大小
        cell.scale = 0.7
        cell.scaleRange = 0.3
        
        // 4.4.設(shè)置粒子方向
        
        cell.emissionLongitude = CGFloat.pi / 2
        cell.emissionRange = CGFloat.pi / 6
        
        // 4.5.設(shè)置例子的存活時(shí)間
        cell.lifetime = 3
        cell.lifetimeRange = 1.5
        
        // 4.6.設(shè)置粒子旋轉(zhuǎn)
        cell.spin = CGFloat.pi / 2
        cell.spinRange = CGFloat.pi / 4
        
        // 4.6.設(shè)置例子每秒彈出的個(gè)數(shù)
        cell.birthRate = 2
        
        // 4.7.設(shè)置粒子展示的圖片
        cell.contents = UIImage(named: "imageName")?.cgImage

        // 5.將粒子設(shè)置到發(fā)射器中
        emitter.emitterCells = [cell]
        
        // 6.將發(fā)射器的layer添加到父layer中
        view.layer.addSublayer(emitter)
    }
    
    /// 移除CAEmitterLayer
    func stopEmittering() {
       
        view.layer.sublayers?.filter({ $0.isKind(of: CAEmitterLayer.self)}).first?.removeFromSuperlayer()
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 粒子系統(tǒng)介紹 什么是粒子系統(tǒng)?粒子系統(tǒng)是由總體具有相同的表現(xiàn)規(guī)律,個(gè)體卻隨機(jī)表現(xiàn)出不同的特征的大量顯示元素構(gòu)成的集...
    Tate_code閱讀 1,815評(píng)論 0 2
  • 什么是粒子系統(tǒng)? 粒子系統(tǒng)是由總體具有相同的表現(xiàn)規(guī)律,個(gè)體卻隨機(jī)表現(xiàn)出不同的特征的大量顯示元素構(gòu)成的集合 粒子定義...
    來金德瑞閱讀 755評(píng)論 0 0
  • 阿娜麗是我們村第一個(gè)讀書畢業(yè)以后在縣城教書的,按照輩分我應(yīng)該喊她姨,她是我們村公認(rèn)最漂亮的。村里面一直流傳著這樣一...
    飛尋天空的鷗閱讀 346評(píng)論 0 0
  • 參考: 說網(wǎng)絡(luò)-扯扯蛋 深入淺出-網(wǎng)絡(luò)七層模型&&網(wǎng)絡(luò)數(shù)據(jù)包 深入淺出-iOS的TCP/IP協(xié)議族剖析&&Sock...
    faterman閱讀 261評(píng)論 0 0
  • 投射兒子健康平安快樂! 投射兒子除了電子游戲還有其他的愛好! 投射兒子頓悟,知道只有學(xué)習(xí)才能帶給自己長遠(yuǎn)的快樂! ...
    陪小天慢慢長大閱讀 203評(píng)論 0 1