今回のエンジニアブログ担当の近藤です。
iOS7で追加された新機能「SpriteKit」を紹介します。
今回はSpriteKit機能のひとつのパーティクルを使ってみましょう。
プロジェクト作成
Xcodeでプロジェクトを新規作成します。
SpriteKitを使うには「SpriteKit Game」テンプレートを選択します。
これでSpriteKitを使用できるプロジェクトが作成されます。
テンプレート名に「Game」の文字があるので、ゲーム開発向けの機能の様ですね。
ViewControllerの中身を少しのぞいてみましょう。
作成されたViewControllerのViewDidLoadメソッドでシーンを作成して、
画面いっぱいに表示させているのがわかります。
このシーン上でパーティクルやスプライトなどのオブジェクトを配置していくことで、
アプリを作っていく仕掛けになっています。
なんとなくcocos2dっぽい感じですね。
パーティクルの作成
次に画面に表示するパーティクルを作成します。
左側のウィンドウから右クリックメニューを開き、「New File」を選択します。
今回はスプライトを使うので、「SpriteKit Particle File」を選択します。
パーティクルの種類は8種類あります。
今回は「Spark」にしました。
パーティクルのファイル名を決めます。わかりやすいファイル名をつけましょう。
これでパーティクルのファイルが完成です。
作成したパーティクルのファイルが追加されているので、
開いてみるとアニメーションするパーティクルが表示されます。
※ここでは静止画ですがXcodeで実際に開くとアニメーションしています。
右側のペインでパーティクルのパラメータを変更することで、
パーティクルの色や大きさ、動きなどを細かく設定することができます。
青くしてスピードを変更してみましたが、ここは好きなように変更してください。
実装
パーティクルが完成したので、いよいよ実装です。
パーティクルなどのSpriteKitのオブジェクトはMyScene.mで実装することで配置できます。
下記のように書き換えてみましょう。
【MyScene.m】
#import "MyScene.h" @implementation MyScene SKEmitterNode *emitter; -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { /* Setup your scene here */ self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; //パーティクルファイルの読み込み emitter = [NSKeyedUnarchiver unarchiveObjectWithFile: [[NSBundle mainBundle] pathForResource:@"sparkParticle" ofType:@"sks"]]; emitter.position = CGPointMake(160,234); emitter.targetNode = self.scene; [self addChild:emitter]; } return self; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ /* Called when a touch begins */ for (UITouch *touch in touches) { //ドラッグした位置にパーティクルを移動する。 CGPoint location = [touch locationInNode:self]; emitter.position = location; } } -(void)update:(CFTimeInterval)currentTime { /* Called before each frame is rendered */ } @end
上記のように実装すると画面上にパーティクルが表示され、
ドラッグするとパーティクルが指の動きについてきます。
今までiOS用のゲームを作るときはUiKitだけでリッチな表現ができず、cocos2dなどのフレームワークを使うことが多かったと思います。
しかし、SpriteKitを使うことでサードパーティのフレームワークに頼らずにゲームを作ることができるようになりました。
Androidとのクロスプラットフォームでの開発を考慮しなければ、Apple純正機能だけで開発を進められるので、より開発しやすくなるのでは?と期待しています。
今回はパーティクルを表示するところだけを紹介しましたが、次回以降でほかの機能も紹介していこうと思います。