Представьте себе игру с видом сверху вниз. С самого начала на экране 10 монстров. Каждый из них представлен CCSprite
с нанесенным на него непрерывным CCAnimation
.
Если я просто запущу анимацию сразу на всех монстров с помощью runAction:[CCAnimate ...]
, все они будут анимироваться синхронно. Результат, который я хочу получить, состоит в том, чтобы запускать каждую анимацию в случайной точке между 0 и ее продолжительностью. Как только анимация достигает своей конечной точки, она должна начинаться с самого начала и продолжаться как обычно, зацикливаясь до бесконечности.
Я не нашел способа добиться такого результата без модификации исходного кода cocos2d. И все же я не могу получить соответствующий результат как для CCRepeatForever
, так и для CCSequence
(когда я хочу зациклить две или более последовательных анимации с помощью кода для последнего случая:
CCAnimate *idleAction = [CCAnimate actionWithAnimation:...];
CCAnimate *moveAction = [CCAnimate actionWithAnimation:...];
// ...
- (void)playIdleAnimation
{
[mySprite runAction:
[CCSequence actions:idleAction,
[CCCallFunc actionWithTarget:self selector:@selector(playMoveAnimation)],
nil]];
}
- (void)playMoveAnimation
{
[mySprite runAction:
[CCSequence actions:moveAction,
[CCCallFunc actionWithTarget:self selector:@selector(playIdleAnimation)]
nil]];
}
Обратите внимание, что я не могу использовать [CCSequence actions:idleAction, moveAction, nil]
, потому что каждое из двух действий может повторяться произвольное количество раз, прежде чем переключиться на другое.
Буду признателен за любые мысли на эту тему. Спасибо.