Nakajijapan

生きるのに必死です。

UIKitで人魂つくってみた

お化けアプリを絶賛作成中なのですが、そのなかで世界観を少しでも作るべくいろいろ試行錯誤しているのですが、ちょっとトップに 人魂でもいれてみようじゃないかと思い立って作ってみました。

iOS5からCore AnimationなるものがサポートされていてパーティクルエフェクトがUIKitでも作成できるようになったので実装してみました。 以前はCocos2Dのフレームワーク情報で作成していたのですがそれを利用しないのは初めて。

まずはフレームワークをインポートする

1

1
#import <QuartzCore/QuartzCore.h>

2

あとは表現したものを想像して実装するのみ!!!!っていってもパラメータが沢山あるので 感覚的にGUIで設定できてその状態のパラメータをみれるツールをつかいました。

これにfire ballっていのがあったのでそれを参考にしつつ自分なりに調整してみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
- (void)viewDidLoad
{
    [super viewDidLoad];

    CAEmitterLayer* fireEmitter = [CAEmitterLayer layer];
    fireEmitter.emitterPosition = CGPointMake(200, 200);
    fireEmitter.emitterSize = CGSizeMake(40, 40);
    fireEmitter.renderMode = kCAEmitterLayerAdditive;

    CAEmitterCell* fire = [CAEmitterCell emitterCell];

    fire.birthRate     = 250;
    fire.lifetime      = 2.0;
    fire.lifetimeRange = 2.06;
    fire.velocity      = 26;
    fire.velocityRange = 40;

    fire.color         = [[UIColor colorWithRed:0.0 green:0.0 blue:0.05 alpha:1.0] CGColor];
    fire.redRange      = 0.12;
    fire.greenRange    = 0.12;
    fire.blueRange     = 0.12;
    fire.contents      = (id)[[UIImage imageNamed:@"particle.png"] CGImage];
    [fire setName:@"fire"];

    fire.alphaRange = 0;
    fire.scale      = 2.0;
    fire.scaleRange = 2.0;
    fire.spin       = 1.56;
    fire.spinRange  = 0;

    fire.alphaSpeed = -0.33;
    fire.scaleSpeed = -0.1;

    fire.emissionRange     = M_PI / 2;
    fire.emissionLongitude = 1.57;
    fire.emissionLatitude  = 2.33;

    fire.xAcceleration = 0;
    fire.yAcceleration = -80;
    fire.zAcceleration = 0;

    fireEmitter.emitterCells = [NSArray arrayWithObject:fire];

    [self.view.layer addSublayer:fireEmitter];

}

とりあえずこれで自分なりの人魂作成に成功しました。 パラメータをいろいろ覚えなければいけないものが沢山あるのでちょっと覚えるの大変だなという印象。 今回その煩雑さをUIEffectDesignerで補完しましたが、それでもパラメータがどのような効果があるのかはある程度理解しておく必要があるようです。

ss

参照

iOS Developer Library https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CAEmitterLayer_class/Reference/Reference.html

UIEffectDesigner http://www.touch-code-magazine.com/uieffectdesigner/