0
[self goToStage:currentStage];
[actor deathAnimation];

我有这两种方法。我想按顺序一一称呼。当一个完成后第二个开始。

//this method used in nsobject subclass
-(void)deathAnimation {

    //Play death animation

}

//this method in cclayer subclass
-(void)goToStage:(int)stage {

   //changing scene
}

在我想按顺序调用的特定事件的刻度函数中

我使用以下代码,但它不起作用

[CCSequence actions:[CCCallFunc actionWithTarget:actor selector:@selector(deathAnimation)], [CCDelayTime actionWithDuration:4.0], [CCCallFuncN actionWithTarget:self selector:@selector(goToStage:)], nil];

Now what i do? Please tell me.. Is there something wrong?
4

3 回答 3

1

在您的界面中定义一个块,例如

typedef void(^MyCompletion)(void);

编辑您deathAnimation以将块参数作为

- (void)deathAnimationWithCompletion:(MyCompletion)finish {
    //..death animation
    //...

    //when animation finishes
    finish(); // This will call your completion block
}

将此方法称为

[self deathAnimationWithCompletion:^{
    [self goToStage:2];
}];

您可以在Ray Wenderlichs 精彩的博客上阅读有关块的信息。

希望能帮助到你!

编辑由于评论
在 cocos2d 我认为你也可以制作这样的序列

id aFuncCall = [CCCallFunc actionWithTarget:self selector:@selector(deathAnimation)];
id antoherFuncCall = [CCCallFunc actionWithTarget:self selector:@selector(goToSecondStange:)];
CCSequence *sequence = [CCSequence actions:aFuncCall,anotherFuncCall, nil];
[self runAction:sequence];

但是我的 cocos2d 编程技能有点过时了,所以不确定这是否有效......

于 2013-05-29T09:14:14.997 回答
1

您可以使用 CCDelayTime 来提供延迟,并使用 CCCallBlock 来传递要调用的方法,如下所示:

[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:1],
                                    [CCCallBlock actionWithBlock:^{[self goToStage:currentStage];}],
                                    [CCDelayTime actionWithDuration:1],
                                    [CCCallBlock actionWithBlock:^{[actor deathAnimation}], nil]];
于 2013-05-31T13:13:10.900 回答
0

你可以打电话

[演员死亡动画];

在 goToStage 函数的末尾,这样它将在调用 deathAnimation 之前执行 goToStage 中的所有内容。

如果您需要它等待特定的时间,您可以在 goToStage 中放置一个延迟计时器。

于 2013-05-29T09:06:37.563 回答