Cocos2d-x Lua基本操作
2016-07-09 22:32
513 查看
1.Lua库引用
目录添加:
lua
lua\luajit\include
lib添加:
lua51.lib;
2.打开Lua库
示例:
3.读取Lua值
示例:
4.获取Lua表
示例:
5.C++调用Lua函数
示例:
6.Lua调用C++函数
示例:
Lua脚本:
目录添加:
lua
lua\luajit\include
lib添加:
lua51.lib;
2.打开Lua库
示例:
lua_State* pL = lua_open(); luaopen_base(pL); luaopen_math(pL); luaopen_string(pL);
3.读取Lua值
示例:
/* 1.执行Lua脚本,返回0代表成功 */ int err = luaL_dofile(pL, "helloLua.lua"); log("open : %d", err); /* 2.重置栈顶索引 */ lua_settop(pL, 0); lua_getglobal(pL, "myName"); /* 3.判断栈顶的值的类型是否为String, 返回非0值代表成功 */ int isstr = lua_isstring(pL, 1); log("isstr = %d", isstr); /* 4.获取栈顶的值 */ if(isstr != 0) { const char* str = lua_tostring(pL, 1); log("getStr = %s", str); } lua_close(pL);
4.获取Lua表
示例:
/* 执行脚本 */ luaL_dofile(pL, "helloLua.lua"); /* 重置栈顶元素 */ lua_settop(pL, 0); /* 取得table变量,在栈顶 */ lua_getglobal(pL, "helloTable"); /* 将C++的字符串放到Lua的栈中,此时,栈顶变为“name”,helloTable对象变为栈底 */ lua_pushstring(pL, "name"); /* 从table对象寻找“name”对应的值(table对象现在在索引为-2的栈中,也就是当前 的栈底) 取得对应值之后,将值放回栈顶 */ lua_gettable(pL, -2); /* 现在表的name对应的值已经在栈顶了,直接取出即可 */ const char* sName = lua_tostring(pL, -1); log("name = %s", sName); lua_close(pL);
5.C++调用Lua函数
示例:
/* 执行脚本 */ luaL_dofile(pL, "helloLua.lua"); /* 重置栈顶元素 */ lua_settop(pL, 0); /* 把helloAdd函数对象放到栈中 */ lua_getglobal(pL, "helloAdd"); /* 把函数所需要的参数入栈 */ lua_pushnumber(pL, 10); lua_pushnumber(pL, 5); /* 执行函数,第一个参数表示函数的参数个数,第二个参数表示函数返回值个数 Lua会先去堆栈取出参数,然后再取出函数对象,开始执行函数 */ lua_call(pL, 2, 1); int iResult = lua_tonumber(pL, -1); log("iResult = %d", iResult);
6.Lua调用C++函数
示例:
bool HelloLua::init() { if (!Layer::init()) { return false; } lua_State* pL = lua_open(); luaopen_base(pL); /* C++的函数和封装函数都必须是静态的,不知道可不可以不是静态的?当然不可以 */ lua_register(pL, "cpp_GetNumber", cpp_GetNumber); luaL_dofile(pL, "helloLua.lua"); lua_close(pL); return true; } int HelloLua::getNumber(int num) { log("getNumber num = %d", num); return num + 1; } int HelloLua::cpp_GetNumber(lua_State* pL) { /* 从栈顶中取一个值 */ int num = (int)lua_tonumber(pL, 1); /* 调用getNumber函数,将返回值入栈 */ lua_pushnumber(pL, getNumber(num)); /* 返回值个数,getNumber只有一个返回值,所以返回1 */ return 1; }
Lua脚本:
-- helloLua.lua文件 local num = cpp_GetNumber(10);
相关文章推荐
- 浅谈容器Vector ,话说ValueMap的一般使用。Cocos2dx 3.0 过渡篇
- cocos2d-x 2.2.3 通过plist创建sprite的过程简单分析(转)
- 【Cocos2d-x 3.0学习笔记】 AnchorPoint 和Position 关系
- cocos2d-x 3.x学习之拖动滑块类
- cocos 中熟练运用场景的切换
- 减少cocos2dx3.3-lua的so文件大小笔记
- Cocos2d-x Json读写
- 【Cocos Creator 基础教程(其他)】——游戏素材资源获取方法
- Cocos2d-x 内存管理
- Cocos2d-3.x触摸事件 中 setSwallowTouches
- Cocos2D-ObjC:在RPG游戏中混合Swift代码
- Cocos2D-ObjC:在RPG游戏中混合Swift代码
- Cocos2D-ObjC:在RPG游戏中混合Swift代码
- cocos2d-lua android解决启动时因为资源加载而黑屏的问题
- cocos2dx-3.x萝莉快跑学习(一)
- 编译Cocos2dx程序 (一)
- cocos2d基础
- cocos2d基础
- COCOS2DX与LUA互相调用使用方法
- cocos2dx中的声音