2012-06-28 2 views
3

Вот видео того, что у меня есть до сих пор. Простите, что мой MBP + QuickTime + Xcode не самый лучший.Улучшение/оптимизация производительности анимации CAEmitterLayer (испускать путь?)

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

Это действительно черновик на то, что я хочу, но вы можете получить идею. Производительность - самая большая проблема, но даже производительность в сторону я теряю процессор/время 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]; 

(как вы» ve, вероятно, заметил, что «объем» является значением по умолчанию)

Это, вероятно, позволит снизить количество частиц, что увеличит производительность (поскольку вам не нужно создавать много частиц, которые появляются за кругом).

+0

Кроме того, kCAEmitterLayerAdditive может быть дорогостоящим, отбрасывая его, мне очень помогли. – Andy

Смежные вопросы