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

  • |
   

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

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



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

画像の表示


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

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

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

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


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


アクションを追加する


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

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


今回はCCMoveToを使いましたが、その他にもたくさんのアクションがあります。その一部。
  • CCMoveTo
  • CCMoveBy
  • CCJumpTo
  • CCRotateTo
  • CCScaleTo
  • CCFadeTo
  • CCFadoIn
  • Bezier
  • Blink


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


CCAcitonに様々な振る舞いをつけることができます。
例えば複数のアクションを組み合わせるCCSpawnなどを使えばより複雑なアクションを作りだせます。
  • CCSequence
  • CCSpawn
  • CCRepeatForever
  • CCRepeat
  • CCDelayTime 何も実行しない。[CCDelayTiome actionWithDuration:1] (一秒何もしない)


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];


特殊なアクション

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


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 {

}


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



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


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

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

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



タッチイベント

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

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

self.isTouchesEnabled = YES;

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

  • – (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;

    • 実際に、タッチをした座標を取得するには以下のコードを書く
      
      -(void) ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
      
      UITouch * touche = [touches anyObject];
      CGPoint *location = [touche locationInView : [touch view]];
      location =[[CCDirector sharedDirector] convertToGL:location]; 
      
      }
      
      






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


      配列にオブジェクトを入れる時には、addObjectを使う
      
      NSMutableArray * players;
      
      [players  addObject plyer];
      
      

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









      Related Posts Plugin for WordPress, Blogger...