在cocos2d-x中使用LUA

1、注冊LUA脚本引擎

CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

2、运行一段LUA字符串

luaEngine->executeString("print(\"test executeString\\n\")");

3、运行一个LUA文件

luaEngine->executeScriptFile(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("hello.lua"));

4、运行LUA中的一个全局方法

luaEngine->executeGlobalFunction("test");	// 运行LUA中的test方法

// lua function
function test()
print("I'm lua function")
end

5、运行LUA中的某个带參数的方法并获取返回值

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++中的全局方法

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++中注冊方法:

   lua_register(state, "lua_add", add); // 第二个參数为将在LUA中用到的方法名,第三个參数为C++中相应的全局函数

3)、在LUA中调用方法:

lua_add(2, 3);

7、在LUA中调用C++的对象及对象的方法

1)、在C++中编写一个C++的类。

#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文件。

// 假设要包括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文件。

tolua++ -n CTest -o lua_CTest.cpp CTest.pkg

4)、将生成的文件增加到project。

5)、在LUA中使用C++的CTest对象。

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);

最新文章

  1. JS中的函数(二):函数参数(你可能不知道的参数传递)
  2. 译\Node.js应用的持续部署
  3. SQLSERVER20008 完整备份和差异备份
  4. ABAP报表程序编写规范 .
  5. eclipse关联源码的方法
  6. Rsync同步、Rsync+Lsync实时同步
  7. 如何在不使用三大地图的KEY和相关组件的情况下,直接传参数到相关的H5地图
  8. 学JAVA第四天,JAVA获取年月日
  9. 在 Apex 中得到 sObject 的信息
  10. nc工具使用
  11. springboot项目创建
  12. POJ 3349-Snowflake Snow Snowflakes-字符串哈希
  13. OpenCV-Python入门教程4-颜色空间转换
  14. 阻止Java反编译蛋疼方法
  15. Apple Watch笔记-应用内导航模式
  16. Python nose单元测试框架的安装与使用
  17. Codeforces 483B - Friends and Presents(二分+容斥)
  18. javaScript中用eval()方法转换json对象
  19. java对图片的处理
  20. firemonkey Grid自定义

热门文章

  1. React 入门之路
  2. PHP利用lua实现Redis Sorted set的zPop操作
  3. 【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
  4. CentOS7设置DNS服务器
  5. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之功能与数据分析
  6. 在VS2010中如何添加MSCOMM控件,实现串口通讯
  7. bootcamp安装win7的详细步骤 (光盘安装)
  8. 云数据库 RDS 版怎么创建数据库和账号MySQL 5.7版
  9. C#按指定长度分割字符串
  10. dm8148 videoM3 link源代码解析