2012-06-28 70 views
3

這是我迄今爲止獲得的視頻。請原諒,我的MBP + QuickTime + Xcode不是最好的。改善/優化CAEmitterLayer動畫的性能(沿着路徑發出?)

http://www.youtube.com/watch?v=DGRwz7n3kNA

這是對我想要什麼真正的草稿,但你可以得到的想法。性能是最大的問題,但即使是性能,我正在浪費CPU/GPU時間渲染/計算粒子後面我的UIImageView(惡魔符文尋找的東西)。

有沒有人有任何想法如何沿路徑發射粒子或更好的方式來獲得視圖背後的發光動畫?下面是設置的高達動畫我發射器視圖的一個片段:

emitter = (CAEmitterLayer*)self.layer; 
CGSize size = self.frame.size; 
[emitter setEmitterPosition:CGPointMake(size.width/2.0f, size.height/2.0f)]; 
[emitter setEmitterSize:CGSizeMake(size.width, size.height)]; 
[emitter setEmitterShape:kCAEmitterLayerCircle]; 
[emitter setRenderMode:kCAEmitterLayerAdditive]; 

CAEmitterCell *runeGlow = [CAEmitterCell emitterCell]; 
[runeGlow setColor:[[UIColor whiteColor] CGColor]]; 
[runeGlow setName:@"runeGlow"]; 
[runeGlow setBirthRate:4000.0f]; 
[runeGlow setVelocity:30.0f]; 
[runeGlow setLifetime:0.6f]; 
[runeGlow setEmissionRange:M_PI * 2.0f]; 
[runeGlow setContents:(id)[[UIImage imageNamed:@"burn.png"] CGImage]]; 

[emitter setEmitterCells:[NSArray arrayWithObject:runeGlow]]; 

回答

1

您可以設置發射模式,只能發出的形狀的輪廓顆粒,這樣

[emitter setEmitterMode:kCAEmitterLayerOutline]; 

(正如你」可能會注意到「音量」是默認值)

這可能會允許您降低粒子數量,這會提高性能(因爲您不必創建大量出現在圓圈後面的粒子)。

+0

此外,kCAEmitterLayerAdditive可能會很昂貴,這對我幫助很大。 – Andy