如何在runAction结束时调用特定函数?

时间:2011-10-31 18:38:15

标签: function cocos2d-iphone selector scheduler ccsprite

我正在精灵上执行runAction以移动到某个位置。

[[crBalls[cb.count] getball] runAction:[CCSequence actions:[CCMoveTo actionWithDuration:timeToTravel position:ccp(xIntercept,yIntercept)],[CCMoveTo actionWithDuration:0.05 position:FD],nil]];

一旦精灵移动到所需位置(FD),那么我想在那时调用一个函数。现在我正在安排一个选择器在'timeToTravel'延迟后被调用,这是上述动作完成执行所花费的时间。(我使用调度程序代替performSelector,因为执行选择器更容易出问题)

[self schedule:@selector(placeThatDamnBall) interval:timeToTravel+0.05];

-(void) placeThatDamnBall
{
[self unschedule:@selector(placeThatDammBall)];
[self ballPlacedIn:FD.x :FD.y :cb.type : cb.count];
}

但这并不完全可靠,并且在极少数情况下可能会导致问题,在精灵到达目的地之前可能会调用该函数。有没有什么方法可以避免必须调用选择器,并且能够在精灵真正到达目的地后调用该函数?

由于

1 个答案:

答案 0 :(得分:3)

在序列的末尾添加CCCallFunc

[[crBalls[cb.count] getball] runAction:
    [CCSequence actions:
        [CCMoveTo actionWithDuration:timeToTravel position:ccp(xIntercept,yIntercept)],
        [CCMoveTo actionWithDuration:0.05 position:FD],
        [CCCallFunc actionWithTarget:self selector:@selector(placeThatDamnBall)],
        nil]];