コード例 #1
0
ファイル: CCSceneManager.cpp プロジェクト: gaojiefeng/Tui-x
CSceneExtension* CSceneManager::loadScene(const char* pSceneName)
{
	CCAssert(pSceneName && strlen(pSceneName), "should not null");

	map<string, CSceneExtension*>::iterator mitr = m_mSceneCachePool.find(pSceneName);
	if( mitr != m_mSceneCachePool.end() )
	{
		return mitr->second;
	}
#if USING_LUA
	map<string,int>::iterator itr = m_mFnSceneCreateScriptFunc.find(pSceneName);
	if(itr!=m_mFnSceneCreateScriptFunc.end())
	{
		LuaEngine* pEngine = LuaEngine::getInstance();
		LuaStack* pStack = pEngine->getLuaStack();

		__Array pRetArray;
		pRetArray.initWithCapacity(1);

		int nRet = pStack->executeFunctionReturnArray(itr->second, 0, 1, pRetArray);
		CCAssert(pRetArray.count() > 0, "return num = 0");

		Ref* pReturnObject = pRetArray.getObjectAtIndex(0);
		pStack->clean();

		CSceneExtension* pSceneExt = dynamic_cast<CSceneExtension*>(pReturnObject);
		pSceneExt->setClassName(pSceneName);
		return pSceneExt;
	}
#else
	map<string, Fn_CreateSceneExtension>::iterator itr = m_mFnSceneCreatePointers.find(pSceneName);
	if( itr != m_mFnSceneCreatePointers.end() )
	{
		CSceneExtension* pScene = (*itr->second)();
		pScene->setClassName(pSceneName);
		pScene->init();
		pScene->autorelease();
		return pScene;
	}
#endif
	return NULL;
}