Как мне вызвать определенную функцию в конце runAction? - PullRequest
1 голос
/ 31 октября 2011

Я выполняю runAction на спрайте для перемещения в позицию.

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

Как только спрайт перемещается в нужную позицию (FD), я хочу вызвать функцию в это время. Сейчас я планирую вызвать селектор, который будет вызван после задержки 'timeToTravel', которая является временем, затрачиваемым вышеуказанным действием, чтобы завершить выполнение (я использую планировщик вместо executeSelector, поскольку селектор выполнения более подвержен проблемам)

[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 Ответ

3 голосов
/ 31 октября 2011

Добавьте 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]];
...