我正在精灵上执行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];
}
但这并不完全可靠,并且在极少数情况下可能会导致问题,在精灵到达目的地之前可能会调用该函数。有没有什么方法可以避免必须调用选择器,并且能够在精灵真正到达目的地后调用该函数?
由于
答案 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]];