cocos2dでCCActionを使ってアクションを実行した後に何らかの処理を行いたい場合があります。
その場合、
うまくいかないコード
//アクション(フェードアウト)
CCFadeOut *fadeOut = [CCFadeOut actionWithDuration:1.0];
//何らかの処理
としても、
フェードアウトアクションの完了を待ってくれず、すぐに処理が行われてしまいます。
方法1
そこで、処理を行うメソッドを別に用意(例:hoge)し、
CCSequenceにアクションとメソッドの順に登録して実行すれば、順次処理してくれます。
//アクション(フェードアウト)
CCFadeOut *fadeOut = [CCFadeOut actionWithDuration:1.0];
//処理関数を生成
CCCallFunc *hogeFunc = [CCCallFunc actionWithTarget:self selector:@selector(hoge)];
//シーケンシャルにアクションを実行
[self runAction:[CCSequence actions:fadeOut, hogeFunc, nil]];
- (void)hoge {
//何らかの処理
}
CCCallFuncの他に、CCCallFuncN(引数にsenderが付く)、CCCallFuncND(senderや任意の引数がつく)があります。
方法2
もしくはブロックを使う場合は、
CCFadeOut *fadeOut = [CCFadeOut actionWithDuration:1.0];
CCCallBlock *hogeFunc = [CCCallBlock actionWithBlock:^{
//何らかの処理
}];
[self runAction:[CCSequence actions:fadeOut, hogeFunc, nil]];
としても可能です。