2016-12-05 21 views
2

我對設置的槍口眩光有粒子效應。我目前使用的是低numParticlesToEmit來限制發射器短時間突發,並且每當我想要開始一個新的粒子爆發時,在發射器上執行resetSimulation()。重新啓動SKEmitterNode而不移除粒子

我遇到的問題是,resetSimulation()屏幕上刪除所有粒子,我經常需要創建粒子的新的突發之前,所以他們得到早期抹去以前的顆粒通常消失。

有一個乾淨的方式,而無需刪除顆粒已經在屏幕上再次啓動發射器?

回答

3

通常,粒子系統在SKEmitters中缺少一個特徵:持續時間。這控制了系統發出的時間。 ,我不認爲這在SKEmitter儘管SCNParticleSystems

沒關係,周圍的工作是:

SKEmitters有numParticlesToEmit屬性和particleBirthRate。綜合起來,這些決定了粒子系統在關閉之前發射多長時間。

使用這些,因爲它可以創建你想要的東西,像一個槍口閃光和爆炸的方式發射的粒子的脈衝發射的控制。

我不知道這是否remvoes本身,當它達到此限制。如果沒有,你將不得不創建某種清除功能。因爲獲得所需效果的方式(屏幕上有多個槍口閃光)是copy()SKEmitter。這非常有效,所以不要擔心開銷。

+0

是的,這很好。一個等待的快速SKAction序列然後removeFromParent可以很好地處理移除。 – Zek

2

有上是假設的粒子移動到另一個節點,這樣當你重新發射SKEmitters一個targetNode,以前的粒子仍停留。不幸的是,除了其他人已經知道如何讓它工作並且我錯過了它之外,這仍然是我所能說的。請記住這一點,以防萬一他們修好它。

+0

順便說一句,SCNPlanes與粒子的SKScene將適用於需要在多個位置/視圖中需要兩個相同粒子的實例的問題。唯一的技巧,將SCNScene放入SKScene中。 – Confused

+0

這需要sk3dnode已經知道它,但它是一個瘋狂的混亂渲染 – Knight0fDragon

0

喜來幫助未來的讀者,我用它來計算出發射的持續時間的代碼是這樣的:

let duration = Double(emitter.numParticlesToEmit)/Double(emitter.particleBirthRate) + Double(emitter.particleLifetime + emitter.particleLifetimeRange/2)

它完美對我來說

擴展:

extension SKEmitterNode { 
    var emitterDuration: Double { 
     return Double(numParticlesToEmit)/Double(particleBirthRate) + Double(particleLifetime + particleLifetimeRange/2) 
    } 
} 
相關問題