cocos2d のチュートリアルをやってみた。

連休で何も出来ていなかったので、今日からぼちぼちcocos2dの勉強を始めます。

まずは、勉強会で@xionchannelさんで見せてもらったサンプルは少し難しいので、これがとりあえずわかるように頑張ります。

今回のサンプルはhttp://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorialをやってみます。

画像の表示

まずは、キャラクタの表示です。 主人公なり、敵なり、何らかしら画像を貼る作業です。

[cpp] //ファイルを呼び出し、大きさを決める CCSprite * player = [CCSprite spriteWithFile:@"Player.png" rect:CGRectMake(0,0,20,20)];

//場所を決める player.position = ccp(20,120);

//画面に追加する [self addChild:player];

[/cpp]

画像を呼び出し、場所を決めて、それを画面に追加する。

アクションを追加する

表示させた画像に、移動する何らかしらのアクションを追加する。

基本的な移動のCCMoveToを使った場合 [cpp] // 1秒後に(100,100)に移動 id moveAction = [CCMoveTo actionWithDuration:1.0f position:cpp(100,100)]; [player runAction:moveAction];

[/cpp]

今回はCCMoveToを使いましたが、その他にもたくさんのアクションがあります。その一部。

  • CCMoveTo
  • CCMoveBy
  • CCJumpTo
  • CCRotateTo
  • CCScaleTo
  • CCFadeTo
  • CCFadoIn
  • Bezier
  • Blink

まだまだ色々ありますが、福井高専IT研究会wikiに載っていますのでこちらも参考にしていただければ。

CCAcitonに様々な振る舞いをつけることができます。 例えば複数のアクションを組み合わせるCCSpawnなどを使えばより複雑なアクションを作りだせます。

  • CCSequence
  • CCSpawn
  • CCRepeatForever
  • CCRepeat
  • CCDelayTime 何も実行しない。[CCDelayTiome actionWithDuration:1] (一秒何もしない)

[cpp]

id action1 = [CCMoveTo actionWithDuration:1 position:ccp(0,100)]; id action2 = [CCMoveBy actionWithDuration:1 position: ccp(100,100)];

//action1 , action2の順番に実行されます [player runAction: [ CCSequence actions:action1 , action2 , nil]];

//action1,action2を同時に実行します。 [player runAction:[CCSpawn actions:action1,action2,nil]];

// CCRepeatForeverはaction2をその名の通り、永遠に実行します。 id repeat = [CCRepeatForever actionWithAction: action2]; [player runAction:repeat];

[/cpp]

特殊なアクション

CCCallFuncなどを利用すると、他のメソッドをアクションで呼ぶことができる。

[cpp]

id action1 = [CCMoveTo actionWithDuration:1 position:ccp(0,100)]; id callFunc = [CCCallFunc actionWithTarget:self selector:@selector(nextAction)];

[player runAction:[CCSeqence actions:action1 , callFunc . nil]];

-(void) nextAction {

}

[/cpp]

CCCallFuncには、CCCallFuncNとCCCallFuncNDが存在します。 CCCallFuncNは引数としてノードを取得し、CCCAllFuncNDはノード+ポインタを取得できます。

継続的にメソッドを呼ぶSchedule

先ほどまでのActionはあくまで一時的な動作ですが、継続的に動かすにはScheduleを使います。 [cpp]

[self schedule:@selector(update:) interval:1.0];

// dtは経過した時間 -(void)gameLogic:(ccTime)dt { [self addTarget]; }

[/cpp]

タッチイベント

iPhoneをタッチしたときのイベント。

まずはタッチを有効にするために、object.isTouchesEnabled = YES にしてやる。

[cpp] self.isTouchesEnabled = YES; [/cpp]

で、実際タッチをしたときのイベントを書く。

  • - (void)ccTouchesBegan:(NSSet )touches withEvent:(UIEvent )event;
  • - (void)ccTouchesMoved:(NSSet )touches withEvent:(UIEvent )event;
  • - (void)ccTouchesEnded:(NSSet )touches withEvent:(UIEvent )event;
  • - (void)ccTouchesCancelled:(NSSet )touches withEvent:(UIEvent )event;
    • 実際に、タッチをした座標を取得するには以下のコードを書く [cpp]

      -(void) ccTouchesBegan:(NSSet)touches withEvent:(UIEvent)event {

      UITouch * touche = [touches anyObject]; CGPoint *location = [touche locationInView : [touch view]]; location =[[CCDirector sharedDirector] convertToGL:location];

      }

      [/cpp]

      その他新しく発見したこと

      配列にオブジェクトを入れる時には、addObjectを使う [cpp]

      NSMutableArray * players;

      [players addObject plyer];

      [/cpp]

      オブジェクトにはtagが付けられる