CCNode* CCBReader::readNodeGraphFromData(CCData *pData, CCObject *pOwner, const CCSize &parentSize) { mData = pData; CC_SAFE_RETAIN(mData); mBytes = mData->getBytes(); mCurrentByte = 0; mCurrentBit = 0; mOwner = pOwner; CC_SAFE_RETAIN(mOwner); mActionManager->setRootContainerSize(parentSize); mActionManager->mOwner = mOwner; CCDictionary* animationManagers = CCDictionary::create(); CCNode *pNodeGraph = readFileWithCleanUp(true, animationManagers); if (pNodeGraph && mActionManager->getAutoPlaySequenceId() != -1 && !jsControlled) { // Auto play animations mActionManager->runAnimationsForSequenceIdTweenDuration(mActionManager->getAutoPlaySequenceId(), 0); } // Assign actionManagers to userObject if(jsControlled) { mNodesWithAnimationManagers = new CCArray(); mAnimationManagersForNodes = new CCArray(); } CCDictElement* pElement = NULL; CCDICT_FOREACH(animationManagers, pElement) { CCNode* pNode = (CCNode*)pElement->getIntKey(); CCBAnimationManager* manager = (CCBAnimationManager*)animationManagers->objectForKey((intptr_t)pNode); // (jason_shi): 将未命名的JSController命名为路径名 if (manager->getDocumentControllerName().compare("") == 0) { CCString* pStr = dynamic_cast<CCString*>(pNode->getCustObject()); if (pStr) { manager->setDocumentControllerName(pStr->getCString()); pNode->setCustObject(nullptr); } } pNode->setUserObject(manager); if (jsControlled) { mNodesWithAnimationManagers->addObject(pNode); mAnimationManagersForNodes->addObject(manager); } }