3

ここに私がこれまでに得たもののビデオがあります。私のMBP + QuickTime + Xcodeは最高ではありません。

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

これは私が望むものの非常に大まかな草案ですが、アイデアを得ることができます。パフォーマンスが最大の問題ですが、パフォーマンスはさておき、UIImageView (悪魔のようなルーン文字) の背後にあるパーティクルのレンダリング/計算に CPU/GPU 時間を浪費しています。

パスに沿ってパーティクルを放出する方法や、ビューの背後で光るアニメーションを取得するより良い方法を知っている人はいますか? アニメーションを設定するエミッタ ビューのスニペットを次に示します。

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]];
4

1 に答える 1

1

このように、形状の輪郭にのみパーティクルを放出するようにエミッタ モードを設定できます。

[emitter setEmitterMode:kCAEmitterLayerOutline];

(お気づきかもしれませんが、「ボリューム」がデフォルト値です)

これにより、パーティクルの量を減らすことができ、パフォーマンスが向上します (円の背後に表示されるパーティクルを大量に作成する必要がないため)。

于 2012-07-18T20:59:44.847 に答える