読者です 読者をやめる 読者になる 読者になる

cocos2d for iPhone入門

こんにちは。亀山です。

僕が今ゲームアプリの開発でバリバリ使っている 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などを書きたいと思います。