Sequence* GameObjectFactory::createVirusPatternSpawnActionWithPatternTypeAndPosition(BattleField *parent, CreateObjectType virusType, VirusSpawnPatternType patternType, Vec2 rootPos) { auto data = JSONPacker::unpackVirusSpawnPattern(json, patternType); Vector<cocos2d::FiniteTimeAction *> arrayOfActions; for (auto pos : data.positions) { auto callfunc = CallFunc::create([&, rootPos, pos, parent, virusType]() { Virus* virus = static_cast<Virus*>(this->createGameObjectByType(virusType)); virus->setPosition(rootPos + pos); virus->setDelegate(parent); parent->addGameObject(virus); virus->playSpawnAnimation(); }); arrayOfActions.pushBack(callfunc); arrayOfActions.pushBack(DelayTime::create(0.1f)); } return Sequence::create(arrayOfActions); }