博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2dx之C++调用Lua
阅读量:5901 次
发布时间:2019-06-19

本文共 1932 字,大约阅读时间需要 6 分钟。

  hot3.png

原文地址:

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的tabletableTemp = {name = "乐逍遥Jun", uuid = "001"}--没有参数的函数function test()    return 100end--有参数的函数function testadd(a,b,str)    local c = a+b    return c, strend

 

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的

转载于:https://my.oschina.net/igames/blog/619014

你可能感兴趣的文章
Hadoop生态圈-Kafka的完全分布式部署
查看>>
css的border的solid
查看>>
[MODx] Build a CMP (Custom manager page) using MIGX in MODX 2.3 -- 1
查看>>
jQuery自动完成点击html元素
查看>>
[算法]基于分区最近点算法的二维平面
查看>>
webpack多页应用架构系列(七):开发环境、生产环境傻傻分不清楚?
查看>>
笨办法学C 练习1:启用编译器
查看>>
树的总结--树的性质(树的深度) leetcode
查看>>
nagios短信报警(飞信fetion20080522004-linrh4)
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
如何学习Linux命令-初级篇
查看>>
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
在 SELECT 查询中使用表表达式
查看>>
静态路由和默认路由
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>