2012年3月5日月曜日

カスタムアクションCCRemove

CCSequence などで、一連のアクションを終了したあと、勝手にインスタンスを削除させたいことがあります。
CCCallFuncN を使って特定のメソッドを呼び出し、そのメソッドの中でゴニョゴニョ削除させるのも面倒なので、CCRemove というアクションを作りました。

仕組みは、CCShow とか CCHide と同じなので、詳しい解説は抜きにざっくりコードを晒します。

CCActionExtensions.h
@interface CCRemove : CCActionInstant {
}
@end

CCActionExtensions.m
#import "CCActionExtensions.h"
@implementation CCRemove

- (void)startWithTarget:(id)aTarget
{
 [super startWithTarget:aTarget];
 [((CCNode *)aTarget) removeFromParentAndCleanup:YES];
}

@end
以上です。

使い方は、こんな感じになります。
// 3秒かけてフェードアウトさせたあと、スプライトを削除
CCFadeOut *fadeout = [CCFadeOut actionWithDuration:3.0f];
CCRemove *remove = [CCRemove action];
CCSequence *seq = [CCSequence actions:fadeout,remove,nil];
[sprite runAction:seq];

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...