文档章节

cocos2dx之C++调用Lua

乐逍遥jun
 乐逍遥jun
发布于 2016/02/22 21:39
字数 445
阅读 41
收藏 0

原文地址: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的


© 著作权归作者所有

共有 人打赏支持
乐逍遥jun
粉丝 6
博文 79
码字总数 39510
作品 0
东城
技术主管
私信 提问
VS Code 的 Quick-Cocos2dx 开发插件 - vscode-QuickXDev

vscode-QuickXDev,强大的 Quick-Cocos2dx 开发工具,目前适配 Quick-Cocos2dx-Community 3.7.2 版。 针对 VS Code 的 Quick-Cocos2dx 开发插件,具有诸多特性,方便进行 Quick-Cocos2dx 游戏...

lonewolf
2018/09/03
0
0
C++与java混合编写和C++与OC混合编写 笔记

1、Java与C++混合编写: 使用JNI(Java本地调用) 实例:cocos2dx/platform/android/jni对应目录cocos2dx/platform/android/java const char getConstStrRetuen(const char funcName){ JniMeth......

悠米海
2014/06/12
0
0
cocos2dx 3.x win7+VS2012开发环境搭建及HelloWorld

准备工作 (1)VS2012 (2)cocos2dx cn.cocos2d-x.org/download (3)python 新版本的cocos2dx 需要python编译 2. 安装软件 (1)VS2012 从官网下载并安装 (2)python 安装:下载地址: ww...

simpower
2015/07/29
0
0
cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题

最近一直在忙着改前端的东西,当然也遇到了一些问题,所以记录一下 cocos2d-x中使用tolua++导出函数中传递字节流给lua使用的问题 在cocos2dx 3.0 中提供了新的c/c++函数导出到lua使用的工具,...

pigsoldier
2014/05/17
0
5
CC3.2+Lua(8) ——Lua调用自定义C++类

【唠叨】 本节要讲的是如果将自己写的C++类注册进Lua环境,让Lua去调用自定义的C++类。 网上有很多都是用原始的tolua++工具来注册C++类的,我看了很多这样的教程,感觉操作起来十分麻烦,而且...

0-1
2014/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

新项目技术栈落地(二)——SpringMVC+Spring和SpringBoot的选择

使用SpringBoot进行项目开发已经是大势所趋,但在这里还是要说明为什么选择SpringBoot,选择SpringBoot带来的好处和SpringBoot注意的一些问题。 首先SpringBoot并不是一门新技术而是spring开...

Skqing
19分钟前
1
0
如何使用apache的ab压力测试小工具传参数

前言: windows下安装的phpstudy软件里集成的apache带了ab工具,所以可以不用单独下载。其他的操作系统下的安装或部署这里就不介绍了! 一、 使用windows的cmd进入apache的根目录,输入ab查看...

小谜弟
21分钟前
0
0
angular6.1.0 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected.

angular6.1.0 运行时报错ERROR in node_modules/rxjs/internal/types.d.ts(81,44): error TS1005: ';' expected. node_modules/rxjs/internal/types.d.ts(81,74): error TS1005: ';' expect......

Jack088
23分钟前
0
0
阿里面试题剖析,如何保证消息不被重复消费?

面试题 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 面试官心理分析 其实这是很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑会不会重复消费...

李红欧巴
24分钟前
0
0
基于 DataLakeAnalytics 的数据湖实践

随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析...

zhaowei121
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部