cocos2dの使い方【説明】③ 〜ScheduleとAction〜
cocos2dでものを動かすアクションをしたい時。
前作ったコードではScheduleというTimerで少しずつ座標の値をずらす事で動かしていましたが,今回はcocos2dに本来から備わっている,いろいろな動きを使ってみます。
それがActionな訳ですが,使い方は至って簡単です。
例えば画像をまっすぐ定速で動かしたければ,
ActionLayer.m
#import "ActionLayer.h" @interface ActionLayer(){ } @property (assign) CGSize screenSize; @property (nonatomic, assign) CCSprite *square; @end @implementation ActionLayer @synthesize screenSize, square; - (id)init{ if (self = [super init]) { screenSize = [CCDirector sharedDirector].winSize; square = [CCSprite spriteWithFile:@"square.png"]; square.scale = 0.1; square.position = ccp(50, screenSize.height/2); //ここに[Actionしたい対象 runAction:アクション];でアクションする事が出来ます。 [square runAction:[CCMoveTo actionWithDuration:2 position:ccp(300, square.position.y)]]; [self addChild:square]; } return self; } @end
アクションの一覧に関しては,実際にCCActionIntervalクラスを見てもらえれば全て書かれていますが,日本語の説明のあるサイトもありますのでそちらを参考にしてみて下さい。
(例えば : http://www.itassist.info/modules/blog/archives/489)
アクションでは連続で違うアクションをする,同時にアクションをする,ループするなどをすることもできます。ゲームでは使う事が多くなると思います。
適当に書いたものですが,
float durationTime = 2; [square runAction:[CCSequence actions: [CCSpawn actions:[CCMoveTo actionWithDuration:durationTime position:ccp(300, square.position.y)], [CCScaleBy actionWithDuration:durationTime scale:.5f], nil], [CCScaleBy actionWithDuration:1 scale:2], nil]];
と書くことでCCSequenceは順番にアクションし,CCSpawnは同時にアクションします。
ただこれだと見づらいのでアクションは分けて書いても大丈夫です。メモリ管理には気をつけなければいけませんが...
float durationTime = 2; //わからない時はid型でも大丈夫ですが今回はCCActionInterval*型で。 CCActionInterval *act1 = [CCSpawn actions:[CCMoveTo actionWithDuration:durationTime position:ccp(300, square.position.y)], [CCScaleBy actionWithDuration:durationTime scale:.5f], nil]; CCActionInterval *act2 = [CCScaleBy actionWithDuration:1 scale:2]; [square runAction:[CCSequence actions:act1, act2, nil]];
このくらいになら分けてもいいかもしれません。
次回からはこれらをどのように使うか実践したいと思います。