
[cpp] view plain copy
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到底干了点啥
[cpp] view plain copy
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, int eventType, 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的区别于联系
[cpp] view plain copy
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
}
你说“我给一个整数”,这需要你定义这个整数的值,之后用for语句给数组设置值就可以了,然后打乱顺序,再设置到新数组中。下面在手机上用易历知食软件里的Lua程序设计来编写个示例,供参考。
手机上的代码如下图所示:
手机上运行的结果如下图所示:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)