在cocos2d-x中使用LUA
2014-05-13 13:39
288 查看
在cocos2d-x中使用LUA
1、注册LUA脚本引擎
[code]CCLuaEngine* pEngine = CCLuaEngine::defaultEngine(); CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
2、执行一段LUA字符串
[code]luaEngine->executeString("print(\"test executeString\\n\")");
3、执行一个LUA文件
[code]luaEngine->executeScriptFile(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("hello.lua"));
4、执行LUA中的一个全局方法
[code]luaEngine->executeGlobalFunction("test"); // 执行LUA中的test方法 // lua function function test() print("I'm lua function") end
5、执行LUA中的某个带参数的方法并获取返回值
[code]lua_State* state = luaEngine->getLuaState(); lua_getglobal(state, "myadd"); //查找lua_add函数,并压入栈底 luaEngine->pushInt(5); //函数参数1 luaEngine->pushFloat(6.5); //函数参数2 lua_pcall(state, 2, 1, 0); //调用myadd函数,同时会对myadd及两个参加进行出栈操作,并压入返回值 float result = lua_tonumber(state, -1); //从栈中取回返回值 lua_pop(state, 1); //清栈,由于当前只有一个返回值 printf("result is %f\n", result); // lua function function myadd(x, y) return x + y end
6、在LUA中执行C++中的一个全局方法
1)、编写C++中的全局方法[code]int add(lua_State* L) { int a = lua_tointeger(L, 1); int b = lua_tointeger(L, 2); lua_pushinteger(L, a + b); //入栈返回值 return 1; //1表示压入栈数据个数 }
2)、在C++中注册方法:
[code] lua_register(state, "lua_add", add); // 第二个参数为将在LUA中用到的方法名,第三个参数为C++中对应的全局函数
3)、在LUA中调用方法:
[code]lua_add(2, 3);
7、在LUA中调用C++的对象及对象的方法
1)、在C++中编写一个C++的类。[code]#ifndef _HELLO_CLASS_CTEST_ #define _HELLO_CLASS_CTEST_ #include <iostream> class CTest { public: int v; public: CTest() { v = 1; } CTest(int a) { v = a; } void test() { printf("[CTest::test]hello,tolua++|(%d).\n", this->v); } }; #endif
2)、编写PKG文件。
[code]// 如果要包含C/C++的头文件,使用 $#include "xxx.h" // 如果要包含其它的PKG文件,使用 $pfile "xxx.pkg" $#include "CTest.h" class CTest { int v; CTest(); CTest(int a); void test(); };
3)、执行tolua++,生成lua_CTest.cpp文件。
[code]tolua++ -n CTest -o lua_CTest.cpp CTest.pkg
4)、将生成的文件加入到工程。
5)、在LUA中使用C++的CTest对象。
[code]tolua_CTest_open(state); // 这个方法的名称中的CTest取决于执行tolua++时-n后的参数 std::string str = "t = CTest:new(); t:test();"; // 当然也可以把LUA命令写到lua文件中,然后直接执行lua文件。 luaEngine->executeString(str.c_str()); // 要顺利的调用到tolua_CTest_open方法,还需要把lua_CTest.cpp文件中的方法声明取出并放到合适的地方。 // TOLUA_API int tolua_CTest_open (lua_State* tolua_S);
相关文章推荐
- cocos2d-2.1rc0-x-2.1.3使用lua
- 在cocos2d-x中使用LUA
- cocos2dx-lua 在cocos2d中使用lua脚本进行开发,并介绍脚本在游戏中的详细用途
- Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本
- 【COCOS2DX-LUA 脚本开发之六】利用Lua强转函数解决使用CCNode报错或无法正常使用以及简单介绍 quick-cocos2d-x 与 OpenQuick 两款Lua免费开源框架
- [寒江孤叶丶的Cocos2d-x之旅_35]在Cocos2d-Lua中使用ProtoBuf (Xcode配置方法)
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- 使用Cocos2d-x-3.6创建Lua项目Cocos Code IDE V1.2可调试
- Cocos2d-Lua 3.12 生成绑定 导出C++类给LUA调用( tolua genbindings.py 的使用)
- Cocos2d-x Lua中使用标签
- 使用BabeLua3.x在cocos2d-x中编辑和调试Lua
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密
- 使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
- 使用Cocos2d-lua开发植物大战僵尸11-植物类的实现下
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新
- Cocos2d-x lua 使用定时器
- cocos2d-x 3.x : 使用VS2012/2013调试 Cocos2d-x + Lua (赞哦, 很不错)
- 使用BabeLua3.x在cocos2d-x中编辑和调试Lua
- 在cocos2d-x中使用Decoda调试Lua
- 如何使用ZeroBrane Studio远程调试Cocos2d-x的Lua脚本