cocos2dのAction応用編②

今週は先々週の続きで、cocos2dのAction基本編②について書きます。

Bezier(ベジェ曲線

CCSprite *sprite = [CCSprite spriteWithFile:@"Icon.png"];
sprite.position = ccp(240,0);
[self addChild:sprite z:0];

//ベジェ曲線の設定(3点を決める)
ccBezierConfig bezier1;
bezier1.controlPoint_1 = ccp(-100,100);
bezier1.controlPoint_2 = ccp(-100,200);
bezier1.endPosition = ccp(0,320);
		
id bezierBy = [CCBezierBy actionWithDuration:10.0 bezier:bezier1];
[sprite runAction:bezierBy];

この例だと、左側に半円を描くようにスプライトが動いてくれます。


右側に半円を描くようにしたければ、

ccBezierConfig bezier2;
bezier1.controlPoint_1 = ccp(100,100);
bezier1.controlPoint_2 = ccp(100,200);
bezier1.endPosition = ccp(0,320);

とすれば、右側に半円を描くような動きをスプライトがしてくれます。

Blink(瞬き)

id ccBlink = [CCBlink actionWithDuration:1.0 blinks:YES];
[sprite runAction:ccBlink];

こうすると、1.0秒後にSpriteが表示されます。

Reverse Action(Actionを逆再生する)

id jumpBy = [CCJumpBy actionWithDuration:5.0f position:ccp(0,100) height:200 jumps:4];
id jumpByReverse = [jumpBy reverse];
[sprite runAction:jumpByReverce];

これは、cocos2dのAction基本編で使用したCCJumpByクラスの動きを逆再生させています。
Jumpする回数や高さは変わりませんが、Reverseすることで、Jumpした後のccp(0,100)が、ccp(0,-100)となっています。

Compose Action(Actionを合成する)

id ccBlink = [CCBlink actionWithDuration:1.0 blinks:YES];
id ccBlinkReverse = [ccBlink reverse];
[sprite runAction:[CCSequence actions:ccBlink,ccBlinkReverse,nil]];
[CCSequence actions:ccBlink,ccBlinkReverse,nil]

部分で、Actionを合成し、runActionで合成したActionが連続して再生されます。
nilがないとコンパイルエラーとはなりませんが、Simulatorが起動せずに落ちるので注意

複数のActionを同時に行わせる

id jumpBy = [CCJumpBy actionWithDuration:5.0f position:ccp(0,100) height:200 jumps:4];
id rotateBy = [CCRotateTo actionWithDuration:5.0f angle:270];
id spwan = [CCSpawn actions:jumpBy,rotateBy,nil];
[sprite runAction:spwan];

こうすると、SpriteがJumpしながら回転します。

Repeat(複数回繰り返す)

id jumpBy = [CCJumpBy actionWithDuration:5.0f position:ccp(0,100) height:200 jumps:4];
id rotateBy = [CCRotateTo actionWithDuration:5.0f angle:270];

id repeat = [CCRepeat actionWithAction:[CCSpawn actions:jumpBy,rotateBy,nil] times:4];
[sprite runAction:repeat];

これで、spawnする動作を4回繰り返してくれます。

Forever Repeat (永遠に繰り返す)

id jumpBy = [CCJumpBy actionWithDuration:5.0f position:ccp(0,0) height:200 jumps:4];
id repeatForever = [CCRepeatForever actionWithAction:jumpBy];
[sprite runAction:repeatForever];

これで永遠に200座標分Jumpし続けるSpriteが完成します。


基本編と併せて、今回ご紹介した方法をうまく使い回せば、Spriteに表現させたい動きはほぼ網羅できるのではないでしょうか。