如何重启lua环境或重启引擎
[cpp]查看普通文本
bool app delegate::applicationDidFinishLaunching()
{
cc director * p director = cc director::shared director();
p director-& gt;setOpenGLView(CCEGLView::sharedopengview());
CCEGLView::sharedopengview()-& gt;setDesignResolutionSize(480,320,kResolutionNoBorder);
p director-& gt;setDisplayStats(true);
p director-& gt;setAnimationInterval(1.0/60);
//注册lua引擎
cclua engine * pen gine = cclua engine::default engine();lua之旅从这里开始。
CCScriptEngineManager::shared manager()-& gt;setScriptEngine(pen gine);//保存新创建的lua引擎对象,以便在其他地方调用。
STD::string path = ccfile utils::shared file utils()-& gt;fullPathForFilename(" hello . Lua ");//CCFileUtils工具类必须封装文件的搜索路径。
//然后直接执行脚本,类似于这里helloCpp项目的实现。
//cc scene * PS scene = hello world::scene();
//p director-& gt;runWithScene(PS cene);
//这样的代码,但是这里没有这样的代码。可以猜到像这样的一些功能一定是在hello.lua中实现的其实一定是这样的。
//-因为需要添加这些东西,scene等节点都是c++类对象。
//既然hello.lua可以完成这些任务,那么lua就必须具备访问和操作这些类和对象的能力。
//换句话说,必须有一个机制让c++公开一些接口让lua调用。
//也就是lua可以访问cocos2dx的内容,而且一定要包装好,不然没人用。
pen gine-& gt;execute script file(path . c _ str());
返回true
}
第二步:看看CCLuaEngine做了什么。
[cpp]查看普通文本
类CCLuaEngine:公共CCScriptEngineProtocol
{
公共:
静态ccluengine * default engine(void);
virtual ~ ccluengine(void);
虚拟ccScriptType getScriptType() {
返回kScriptTypeLua
};
CCLuaStack *getLuaStack(void) {
返回m _ stack
}
// -我的新功能1
虚拟void addSearchPath(const char * path);
// -我的新生活2
虚拟void addluloader(Lua _ CFunction func);
// -从CCScriptEngineProtocol继承-
//= = = = = = = = = = =这些函数看起来都是父类中的纯虚函数= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
//-以下函数基本都是调用CCLuaStack * m _ stack的成员方法。
虚拟void removeScriptObjectByCCObject(cc object * pObj);
虚拟void removeScriptHandler(int n handler);
虚拟int reallocatscripthandler(int nHandler);
虚拟int execute string(const char * codes);
virtual int execute script file(const char * filename);
virtual int execute global function(const char * function name);
// -结束-
虚拟int executeNodeEvent(cc node * pNode,int nAction);
virtual int execute menuitemevent(CCMenuItem * pMenuItem);
virtual int executentificationevent(CCNotificationCenter * pNotificationCenter,const char * pszName);
virtual int executecallfunctionevent(CCCallFunc * pAction,cc object * p target = NULL);
虚拟int executeSchedule(int nHandler,float dt,cc node * pNode = NULL);
虚拟int executeLayerTouchesEvent(cc layer * pLayer,int eventType,cc set * pTouches);
虚拟int executeLayerTouchEvent(cc layer * pLayer,int eventType,cc touch * p touch);
虚拟int executelayerkypadevent(cc layer * pLayer,int event type);
virtual int execute accelerometerevent(cc layer * pLayer,CCAcceleration * packcelerationvalue);
virtual int execute event(int n handler,const char* pEventName,CCObject* pEventSource = NULL,const char * pEventSourceClassName = NULL);
int executeTableViewEvent(int nEventType,cocos2d::extension::cc table view * pTableView,void* pValue = NULL,CCArray * pResultArray = NULL);
virtual int executeEventWithArgs(int n handler,CCArray * pArgs);
虚拟bool handle assert(const char * msg);
虚拟bool parse config(CCScriptEngineProtocol::config type type,const STD::string & amp;str);
// -从CCScriptEngineProtocol end继承-
私人:
ccluengine(void)
:m_stack(空)
{}
bool init(void);
静态CCLuaEngine * m _ defaultEngine
CCLuaStack * m _ stack
};
第三步:CCUAEngine类中有一个指针成员变量m_stack。我们先来看看它的定义,注意一下CCLuaStack和CCUAEngine的区别。
[cpp]查看普通文本
类CCLuaStack:公共CObject
{
公共:
静态CCLuaStack * create(void);
静态CCLuaStack * attach(Lua _ State * L);
lua_State* getLuaState(void) {
返回m _ state
}
虚拟void addSearchPath(const char * path);
虚拟void addluloader(Lua _ c function func);
虚拟void removeScriptObjectByCCObject(cc object * pObj);
虚拟void removeScriptHandler(int n handler);
虚拟int reallocatscripthandler(int nHandler);
虚拟int execute string(const char * codes);
virtual int execute script file(const char * filename);
virtual int execute global function(const char * function name);
虚虚净(void);
虚拟void pushInt(int int value);
虚拟void push float(float float value);
虚拟void push boolean(bool boolValue);
虚拟void pushString(const char * string value);
虚拟void pushString(const char * string value,int length);
虚拟void push nil(void);
虚拟void pushc object(cc object * object value,const char * typeName);
虚拟void pushccluavail(const ccluavail & amp;值);
虚拟void pushCCLuaValueDict(const CCLuaValueDict & amp;dict);
虚拟void pushccluavaluevaluearly(const ccluavaluevaluearly & amp;数组);
虚拟bool pushFunctionByHandler(int n handler);
虚拟int execute function(int numArgs);
虚拟int executeFunctionByHandler(int n handler,int numArgs);
virtual int executeFunctionReturnArray(int n handler,int nNumArgs,int nNummResults,CCArray * pResultArray);
虚拟bool handle assert(const char * msg);
受保护:
CCLuaStack(void)
:m_state(空)
,m_callFromLua(0)
{}
bool init(void);
bool initwithlaustate(Lua _ State * L);
lua _ State * m _ state
int m _ callFromLua
};