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に表現させたい動きはほぼ網羅できるのではないでしょうか。