// register lua engine
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");
pEngine->executeScriptFile(path.c_str());
1、CCLuaEngine:Lua脚本引擎,它的基类规定了所有Lua引擎的功能函数。通过CCLuaEngine的静态函数获取一个Lua脚本引擎实例对象指针。
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
2、CCScripEngineManager:脚本引擎管理器,用来设定当前项目的唯一正在使用的脚本引擎。通过CCScripEngineManager的静态函数shareManager获取单例脚本引擎管理器的实例对象指针,设定pEngine位当前使用的脚本引擎
CCSciptEngineManager::shareManager()->setScriptEngine(pEngine);
3、获取CCLuaStack的实例,因为c++和lua是通过堆栈来实现通信的
CCLuaStack *pStack=pEngine->getLuaStack();
4、lua_State保存了整个Lua解释器的状态,每一个运行的脚本文件都在一个动态分配的叫做lua_State的数据结构中运行
lua_State *tolua_s=pStack->getLuaStack();
tolua_extensions_ccb_open(tolua_s);
5、条件编译:如果是ios平台或者Android平台或者是win32平台
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
pStack = pEngine->getLuaStack();
tolua_s = pStack->getLuaState();
tolua_web_socket_open(tolua_s);
#endif
如果是黑莓平台
#if (CC_TARGET_PLATFORM == CC_PLATFORM_BLACKBERRY)
CCFileUtils::sharedFileUtils()->addSearchPath("script");
#endif
6、获取CCFileUtils类的单例,调用类中的fullPathForFilename函数产生一个hello.lua在当前程序所在目录的路径
std::string path=CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");
7、执行这个路径所指向的lua文件
pEngien->executeScripeFile(path.c_str());