こんにちは。亀山です。
僕が今ゲームアプリの開発でバリバリ使っている cocos2d for iPhone について、Objective-C経験者の社員に向けてエントリを書いていきたいと思います。
cocos2d for iPhoneで何が出来るか
もちろんUIImageViewやUIButton等を使ってゲームを作ることも出来るのですが、演出等を入れていくとすぐに重くなってしまいます。 cocos2dを使ってヌルサクなゲームを作りましょう。
ゲームでは「ズバッシャキーン」みたいな表現が必要ですよね。 cocos2dはアニメーションのクラスが豊富なので、複数の画像をいい具合に動かしたりするのが簡単です。 CALayer等で複雑なアニメーションをつくろうと思うとなかなか大変です。
概要
ActionScriptみたいな感じで、スプライトというテクスチャを貼れるクラスが基本となって、子スプライト、孫スプライトのように階層構造が作れます。
アニメーションはjQueryみたいな感じです。Easeとかあります。(ザックリ)
cocos2dxをUIKitで例えると
- CCScene -> UIViewController(役割的に 実際にはCCNodeを継承)
- CCNode -> UIView
- CCSprite -> UIImageView
- CCTexture2D -> UIImage
- CCLabelTTF -> UILabel
こんなかんじで、画面に表示できるものはだいたいCCNodeを継承しています。
CCActionとは?
CCNodeに適用できるアニメーション用のクラスです。 アニメーションを数珠つなぎにしたり、同時に実行したりBlocksや関数を呼んだりできてかなり柔軟です。
例1
CCSprite *sprite = [CCSprite spriteWithFile:@"character.png"];
sprite.position = ccp(20, 20); //ccpはCGPointMakeと同じ。簡潔でよい
id moveTo = [CCMoveTo actionWithDurtaion:1.0f position:ccp(200, 20)]; //右に1秒かけて動くアクション
[sprite runAction:moveTo]; //アクションをspriteが実行
例2
id moveTo1 = [CCMoveTo actionWithDurtaion:1.0f position:ccp(200, 20)];
id moveTo2 = [CCMoveTo actionWithDurtaion:1.0f position:ccp(200, 200)];
id seq = [CCSequence actions:moveTo1, moveTo2, nil]; //アクションを数珠つなぎにするシーケンスを作成
[sprite runAction:seq]; //右に1秒かけて動き、そのあと下に1秒かけて動く
例3
id moveTo1 = [CCMoveTo actionWithDurtaion:1.0f position:ccp(200, 20)];
id blink = [CCBlink actionWithDuration:1.0f];
id spa = [CCSpawn actions:moveTo1, blink];
[sprite runAction:spa]; //点滅しながら右に動く
ちなみにCCSpawnをCCSequenceに入れた場合、一番長いアクションが終わってから次のシーケンスが実行されます。
ところで、複数のスプライトを同期的に動かしたいときは、CCTargetedActionを使います。
例4
CCSprite *sprite2 = [CCSprite spriteWithFile:@"character2.png"];
sprite2.position = ccp(100, 100);
id moveTo1 = [CCMoveTo actionWithDurtaion:1.0f position:ccp(200, 20)];
id moveTo2 = [CCMoveTo actionWithDurtaion:1.0f position:ccp(100, 200)];
id tMove = [CCTargetedAction actionWithTarget:sprite2 action:moveTo2];
id seq = [CCSequence actions:moveTo1, tMove, nil];
[sprite runAction:seq]; //spriteが右に動いたあと、sprite2が下に動く
他には移動を相対値で指定するCCMoveByや、
- 回転させるCCRotateTo(CCRotateBy)
- 大きさを変えるCCScaleTo(CCScaleBy)
- フェードインするCCFadeIn
- フェードアウトするCCFadeOut
- ただ待つだけのCCDelayTime
- 関数を呼ぶCCCallFunc
- Blockを実行するCCCallBlock
などがあります。
このエントリを目次として、次回から環境構築やTipsなどを書きたいと思います。