大佬教程收集整理的这篇文章主要介绍了cocos2dx是怎么使用lua引擎的,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
第一步:看cocos2dx调用lua的最初切入点:
bool AppDelegate::applicationDidFinishLaunching() { CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(CCEGLView::sharedopenGLView()); CCEGLView::sharedopenGLView()->setDesignResolutionSize(480,320,kResolutionNoBorder); pDirector->setDisplayStats(true); pDirector->setAnimationInterval(1.0 / 60); // register lua ENGIne CCLuaENGIne* pENGIne = CCLuaENGIne::defaultENGIne();//从这里开始了lua旅程。 CCScriptENGIneManager::sharedManager()->setScriptENGIne(pENGInE);//保存刚才新建的lua引擎对象,以便别处调用。 std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("Hello.lua");//CCFileUtils工具类一定封装了文件的搜索路径。 //接下来直接执行了脚本,跟句HelloCpp工程的实现,这里本该是类似 //CCScene *pScene = HelloWorld::scene(); //pDirector->runWithScene(pScenE); //这样的代码,但这里并没有这样的代码,可以猜测:Hello.lua中一定是实现了类似这样的一些功能,事实上,一定是这样。 //---因为需要添加的这些东西scene、other nodes都是一些c++类的对象, //既然Hello.lua能完成这些工作,那么lua也一定是有能力访问并操作了这些类与对象, //换句话说,也就是一定存在一种机制,让c++暴漏一些接口供lua调用, //亦即:lua可以访问cocos2dx里面的东西,并且,一定封装的很好用,否则没人用了。 pENGIne->executeScriptFile(path.c_str()); return true; }
第二步:看看CCLuaENGIne到底干了点啥
class CCLuaENGIne : public CCScriptENGIneProtocol { public: static CCLuaENGIne* defaultENGIne(void); virtual ~CCLuaENGIne(void); virtual ccScriptType getScriptType() { return kScriptTypeLua; }; CCLuaStack *getLuaStack(void) { return m_stack; } //-----------new in me 1 virtual void addSearchPath(const char* path); //-----------new in me 2 virtual void addLuaLoader(lua_CFunction func); //----------------------------inherit from CCScriptENGIneProtocol------------------ //==================这些函数好像都是纯虚函数在父类中=========================== //--------下面这几个函数基本都是调用【CCLuaStack *m_stack;】的成员方法来实现的 virtual void removeScriptObjectByCCObject(CCObject* pObj); virtual void removeScriptHandler(int nHandler); virtual int reallocateScriptHandler(int nHandler); virtual int executeString(const char* codes); virtual int executeScriptFile(const char* fileName); virtual int executeGlobalFunction(const char* functionName); //--------------------------------end-------------------------------- virtual int executeNodeEvent(CCNode* pNode,int nAction); virtual int executeMenuItemEvent(CCMenuItem* pMenuItem); virtual int executeNotificationEvent(CCNotificationCenter* pNotificationCenter,const char* pszName); virtual int executeCallFuncActionEvent(CCCallFunc* pAction,CCObject* pTarget = null); virtual int executeschedule(int nHandler,float dt,CCNode* pNode = null); virtual int executeLayerTouchesEvent(CCLayer* pLayer,int eventType,CCSet *pTouches); virtual int executeLayerTouchEvent(CCLayer* pLayer,CCTouch *pTouch); virtual int executeLayerKeypadEvent(CCLayer* pLayer,int eventTypE); virtual int executeAccelerometerEvent(CCLayer* pLayer,CCAcceleration* pAccelerationvalue); virtual int executeEvent(int nHandler,const char* pEventName,CCObject* pEventsource = NULL,const char* pEventsourceClassName = null); int executeTableViewEvent(int neventType,cocos2d::extension::CCTableView* pTableView,void* pValue = NULL,CCArray* pResultArray = null); virtual int executeEventWithArgs(int nHandler,CCArray* pArgs); virtual bool handleAssert(const char *msg); virtual bool parseConfig(CCScriptENGIneProtocol::ConfigType type,const std::string& str); //----------------------------inherit from CCScriptENGIneProtocol end-------------- private: CCLuaENGIne(void) : m_stack(NULL) {} bool init(void); static CCLuaENGIne* m_defaultENGIne; CCLuaStack *m_stack; };
第三步:CCLuaENGIne类中有一个指针成员变量m_stack,我们先来看看它的定义,注意下CCLuaStack和CCLuaENGIne的区别于联系
class CCLuaStack : public CCObject { public: static CCLuaStack *create(void); static CCLuaStack *attach(lua_State *L); lua_State* getLuaState(void) { return m_state; } virtual void addSearchPath(const char* path); virtual void addLuaLoader(lua_CFunction func); virtual void removeScriptObjectByCCObject(CCObject* pObj); virtual void removeScriptHandler(int nHandler); virtual int reallocateScriptHandler(int nHandler); virtual int executeString(const char* codes); virtual int executeScriptFile(const char* fileName); virtual int executeGlobalFunction(const char* functionName); virtual void clean(void); virtual void pushInt(int intvalue); virtual void pushFloat(float floatvalue); virtual void pushBoolean(bool boolvalue); virtual void pushString(const char* stringvalue); virtual void pushString(const char* stringvalue,int length); virtual void pushNil(void); virtual void pushCCObject(CCObject* objectValue,const char* typeName); virtual void pushCCLuaValue(const cCLuaValue& value); virtual void pushCCLuaValueDict(const cCLuaValueDict& Dict); virtual void pushCCLuaValueArray(const cCLuaValueArray& array); virtual bool pushFunctionByHandler(int nHandler); virtual int executeFunction(int numArgs); virtual int executeFunctionByHandler(int nHandler,int numArgs); virtual int executeFunctionReturnArray(int nHandler,int nNumArgs,int nNummResults,CCArray* pResultArray); virtual bool handleAssert(const char *msg); protected: CCLuaStack(void) : m_state(NULL),m_callFromLua(0) {} bool init(void); bool initWithLuaState(lua_State *L); lua_State *m_state; int m_callFromLua; };
以上是大佬教程为你收集整理的cocos2dx是怎么使用lua引擎的全部内容,希望文章能够帮你解决cocos2dx是怎么使用lua引擎的所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。