Можно ли синхронизировать действия в cocos2d-x?

0

Мне нужно запустить действие по набору узлов в cocos2d-x, а затем запустить обратный вызов, когда все эти действия будут завершены.

Например. У меня есть 20 объектов, я хочу, чтобы они масштабировались до определенного значения, и когда все эти действия завершены, я хочу обновить другой объект (пусть называют его шаром) на экране.

Я попробовал установить действие на шаре, ожидая фиксированную задержку, которая должна учитывать общее время выполнения самого длинного действия из списка ранее. Даже если этот подход работает достаточно хорошо, иногда действие с задержкой выполняется до того, как последний объект из первого списка завершит свой собственный. Более того, время выполнения каждого из этих действий может время от времени меняться, так что фиксированная задержка будет угаданным значением для наихудшего сценария. Не очень хорошо, на мой взгляд.

Есть ли способ в cocos2d-x для достижения этого изначально, используя предоставленные API?

Теги:
callback
action
cocos2d-x

1 ответ

0

Я бы сделал это примерно так (в objc, надеюсь, что c++ sdk имеет похожие функции):

    _animComletes = 0;                // must be an iVar
    _maxBalls     = [_nodes count];   // nust be an iVar

    for (CCNode *nn in _nodes) {
        id oneObject = [CCSequence actions:
                [CCScaleTo actionWithDuration:.25 scale:.35],
                [CCCallBlock actionWithBlock:^{
                    _animCompletes++;
                    if (_animCompletes == _maxBalls) {
                        [self scheduleOnce:@selector(updateBall) delay:0];
                    }

                }], nil];
        [nn runAction:oneObject];
    }

-(void) updateBall {
    _animCompletes = 0;
    _maxBalls = 0;
    // do your thing 
}
  • 0
    Хотелось бы что-то в этом роде, но действие, которое я вызову над объектом, определено в самом объекте. Например. Я не вызываю [nn runAction:] но [nn customAction] через пользовательскую функцию. Я задавался вопросом, была ли у cocos2d / x возможность группировать объекты и прослушивать их действия для завершения, без использования пользовательских счетчиков и тому подобного.
  • 0
    @marzapower - Ну, есть isDone (), который возвращает bool, если действие завершено.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню