改进/优化CAEmitterLayer动画的性能(沿路径发射?)

时间:2012-06-28 14:07:04

标签: iphone animation core-animation caemitterlayer

这是我迄今为止所获得的视频。请原谅我的MBP + QuickTime + Xcode并不是最好的。

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 个答案:

答案 0 :(得分:1)

您可以将发射器模式设置为仅在形状轮廓上发射粒子,如此

[emitter setEmitterMode:kCAEmitterLayerOutline];

(正如您可能已经注意到“音量”是默认值)

这可能会让您降低可以提高性能的粒子数量(因为您不必在圆圈后面创建大量粒子)。