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

在cocos2d-x中使用LUA的更多相关文章

  1. 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

    [COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...

  2. vs如何在C++中调用Lua

    最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...

  3. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  4. vs2013如何在C++中调用Lua(二)

    Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...

  5. C++中嵌入Lua脚本环境搭建

    第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...

  6. Qt学习笔记:Qt中使用Lua

    今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编 ...

  7. C中调用Lua函数

    我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...

  8. C中调用LUA回调(LUA注册表)

    实现原理: 通过将LUA中得回调函数存入LUA注册表中来保存LUA函数,然后在需要回调时从LUA注册表中取出LUA函数进行调用 下面是一些预备知识:(学习两个重要的函数) 原汁原味的英文解释的最透彻, ...

  9. lua学习:游戏中的Lua

    lua作为一种脚本语言,可以快速地开发游戏的原型.提高游戏的开发效率. 在游戏中,lua可以用来完成下面这些工作: ●编辑游戏的用户界面 ●定义.存储和管理基础游戏数据 ●管理实时游戏事件 ●创建和维 ...

  10. SLua 中使用 Lua 5.3 的编译工程

    2016-03-05 更新: 之前编译的库,在 Android 下 Lua_Number 和 Lua_Integer 被编译为了32位,导致从 C# 到 Lua 过程中有64位到32位整型转换会出现溢 ...

随机推荐

  1. hdu 4823 Energy Conversion 构造

    题目链接:HDU - 4823 魔法师百小度也有遇到难题的时候——现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力.过了许久,百小度终于读 ...

  2. 打开与关闭eclipse的自动补全功能

    打开: eclipse→Windows→Preferences→Java→Editor→Content Assist:修改Auto Activation triggers for java的值为:.a ...

  3. JSONModel解析Dictionary To Model /JSON To Model

    你在把字典转成object的时候还在按下面这样: self.id = [jsonDict objectForKey:@"id"]; self.name = [jsonDict ob ...

  4. Android Studio和MAT结合使用来分析内存问题

    Android开发中时常会遇到内存泄漏的问题,而Android系统对单个App又有一定的内存限制,此值可以通过一下方式获取: ActivityManager am = (ActivityManager ...

  5. Ubuntu下sudo apt-get install vim 失败的解决办法

    Ubuntu下 执行命令:sudo apt-get install vim 失败 解决办法: 更新一下,命令:sudo apt-get update 再安装即可成功:sudo apt-get inst ...

  6. jQuery ajax 获取信息展示在“下拉列表”中

    <link href="${ctxStatic}/jquery-select2/4.0.3/select2.min.css" rel="stylesheet&quo ...

  7. 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)

    ),请不要反复加群! 欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! 该DrawerLayoutAndroid组件封 ...

  8. Ubuntu下安装JDK图文解析

    我们在64位的Ubuntu中安装JDK,选择的是jdk1.6.0_32版本号.安装文件名称为jdk-6u32-linux-x64.bin(这个是64位系统的),假设是32位系统的还须要去官网下载32位 ...

  9. 【Python】向函数传递任意数量的实参

    传递任意数量的实参 有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参 def get_letter(*letters): for i in lette ...

  10. Android学习笔记(36):Android的两种事件处理方式

    Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...