連休で何も出来ていなかったので、今日からぼちぼち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が付けられる