cocos2dx之C++调用Lua
原文地址:http://blog.csdn.net/dingkun520wy/article/details/49839701
1.引入头文件
#include "cocos2d.h"
#include "CCLuaEngine.h"
USING_NS_CC;
using namespace std;
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
2导入Lua文件
如果是cocos2dx的Lua工程只需要在main.lua里面引用就可以了
3.Lua文件编写
--Lua变量
strTemp = "乐逍遥"
--Lua的table
tableTemp = {name = "乐逍遥Jun", uuid = "001"}
--没有参数的函数
function test()
return 100
end
--有参数的函数
function testadd(a,b,str)
local c = a+b
return c, str
end
4.C++中的调用
首先是找到AppDelegate.cpp中的
#if (COCOS2D_DEBUG > 0) && (CC_CODE_IDE_DEBUG_SUPPORT >0)
将CC_CODE_IDE_DEBUG_SUPPORT的值改为0
如果是没有参数只有一个int返回值的Lua函数只需要调用cocos2dx封装好的executeGlobalFunction函数就行
auto engine = LuaEngine::getInstance();
engine->executeGlobalFunction("test");
如果是比较负责的函数
LuaStack * L =LuaEngine::getInstance()->getLuaStack();
lua_State* tolua_s = L->getLuaState(); //--------有参数和返回值的Lua函数的调用---------
lua_getglobal(tolua_s, "testadd"); // 获取函数,压入栈中
lua_pushnumber(tolua_s, 10); // 压入第一个参数
lua_pushnumber(tolua_s, 20); // 压入第二个参数
lua_pushstring(tolua_s, "测试"); // 压入第三个参数
int iRet= lua_pcall(tolua_s, 3, 2, 0);// 调用函数,调用完成以后,会将返回值压入栈中,2表示参数个数,1表示返回结果个数。
if (iRet) // 调用出错
{
const char *pErrorMsg = lua_tostring(tolua_s, -1);
CCLOG("错误-------%s",pErrorMsg);
return ;
}
int fValue = lua_tonumber(tolua_s, -2); //获取第一个返回值
string str = lua_tostring(tolua_s, -1); //获取第二个返回值
CCLOG("有参数和返回值的Lua函数的调用---%d---,%s",fValue,str.c_str()); //--------------读取Lua的变量------------
lua_getglobal(tolua_s, "strTemp");
string strTemp = lua_tostring(tolua_s, -1);
CCLOG("读取Lua的变量---%s",strTemp.c_str()); //-------------读取Lua的table-----------
lua_getglobal(tolua_s,"tableTemp");
lua_getfield(tolua_s,-1,"name");
string strName = lua_tostring(tolua_s,-1);
CCLOG("读取Lua的table--%s",strName.c_str());
5.注意事项
1.如果你是cpp调用lua函数,那么你的这个lua函数不能是local的
cocos2dx之C++调用Lua的更多相关文章
- cocos2d-x 3.0 在C++中调用lua函数
代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_d ...
- cocos2d-x 3.0 在C++中调用lua函数(2)
个人觉得3.0里面, 在C++下面调用lua函数很不方便, 所以就扩展了一个类, 继承自LuaStack, 代码和使用方式如下: #ifndef __CC_LUA_STACKEX_H_ #define ...
- vs如何在C++中调用Lua
最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- cocos2dx 3.x for lua "异步加载"实现过程
在lua中,cocos2dx 建立的栈只能被一个线程(主线程)访问,如果在c++建立子线程,然后通过c++调用lua回调函数实现异步加载就会报错. 如果试图通过c++子线程直接实现加载资源,返回一个布 ...
- lua调用java java调用lua[转载]
转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...
- c++调用lua
我们主要解决如下几个问题: 转:http://www.cnblogs.com/zisou/p/cocos2dx-lua2.html http://www.cnblogs.com/sevenyuan/p ...
- vs2013如何在C++中调用Lua(二)
Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
随机推荐
- Share_memory
共享内存是允许多个进程共享一块内存,由此来达到交换信息的进程通信机制:它很快没有中间介质,唯一的不足就是需要一定的同步机制控制多个进程对同一块内存的读/写,,它的原理如下: 每个共享内存段都有一个sh ...
- poj 1848 树形dp
思路:表示我很弱,这个想不出dp方程,参考网上代码 #include<iostream> #include<algorithm> #include<cstring> ...
- hdu 3473 裸的划分树
思路: 用Sum[dep][i]记录从tree[po].l到i中进入左子树的和. #include<iostream> #include<algorithm> #include ...
- css图片映射
a <div class="imagemap"> <img src="img/map.png" width="496px" ...
- C#winform MDI子窗体打开时内容显示不全
出现这种情况一般是 打开了多个MDI的子窗体,打开新窗体的时候关闭其他的子窗体就OK了, 具体代码: foreach (Form form in main.MdiChildren) ...
- Sql Server关于text类型的替换
UPDATE Store SET Body=replace(convert(varchar(8000),Body),'http://120.89.46.68:8007','')
- c# 中日期的使用
上月第一天:DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM-01")) 上周星期天:DateTime.Par ...
- oracle开启audit(审计)
1.查看审计功能是否开启(本机已经开启,如果audit_sys_operations值为FALSE就是没开审计) [sql] view plaincopyprint? SQL> CONN /AS ...
- iOS开发——model类模板(过滤null和ID)
说明:model类模板已默认过滤null值,附加特殊情况的关键字ID名的冲突(需手动去掉注释代码).MyMessageModel为示例的名字.可以自己随便起. 1.自己创建一个继承与N ...
- 【整理】c# 调用windows API(user32.dll)
User32.dll提供了很多可供调用的接口,大致如下(转自http://blog.csdn.net/zhang399401/article/details/6978803) using System ...