cocos2dx java 调用lua_cocos2dx之C++调用Lua

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里面引用就可以了

5e7918160df02ca7d210046e9ede18b3.png

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的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 监控小脚本

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一…

93号涨0.86元售6.2元/升 20日油价正式上调

93号涨0.86元售6.2元/升 20日油价正式上调 据悉,自6月20日起汽油、柴油价格每吨提高1000元,航空煤油价格每吨提高1500元。 上调后全国汽油、柴油平均零售价分别为:97号汽油6.6元/升,93号汽油6.2元/升,90号汽油5.8元/升…

eclipse 新建java无scr_解决eclipse中没有js代码提示的问题

自学js,发现eclipse中不管js文件、html文件、jsp文件没有都没js代码的提示,对于js代码也不报错,有时候就因为单词敲错却查了很久没查出来,很烦很难受。在网上找了很多方法,都没有解决,特别是有个在javascri…

C# 互通操作 (二)基础知识1

[DllImport("user32.dll", EntryPoint "MessageBox")] public static extern int DebugWin(int hwnd, string content, string lpcaption, int wType); 讲解下参数的含义EntryPoint 是指向Dll中的一个方法当设定了EntryPoint的指向后 自己定义的方法名就不…

python 细枝末节

1. print 自动换行 看区别 >>> for i in range(4): ... print i ... 0 1 2 3 >>> for i in range(4): ... print i, ... 0 1 2 3 第一个自动回车;第二个没有自动回车,空格隔开。 结论:print会在行尾自动加回车。…

美女MVP专访

博客园专访:中国最美丽的MVP请大家在专访页面中发表评论。制作花絮:在测试专访页面时,不小心发布到了新闻频道,立即引来了园友的热情评论。 推荐小组:转载于:https://www.cnblogs.com/cmt/archive/2008/07/14/1241994.html

鲁班学院java高级架构师_鲁班学院三期java架构师

架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。架构描述语言(ADL)用于描述软件的体系架构。现在已有多种架构描述语言,如Wright(由卡内基梅隆大学开发),Acme(由卡内基梅…

java jconsole rmi 连接不上

今天在虚拟机开放远程jconsole连接,设置了jmxrote的参数 JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.sun.management.jmxremote"JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.sun.management.jmxremote.port9000"JAVA_OPTIONS"${JAVA_OPTIONS} -Dcom.su…

ASP 判断Session变量是否存在的4种方法

如果去读取没有初始化的Session变量,将得到Empty值(空值)。所以可以利用该值来判断Session变量是否已经初始化。加入我们要判断名为sesName的变量是否已经建立,我们可以用以下4种方法:1 If Session("sesName") "" Then …

SRE(Simple Rule Engine) Document

What is a rule engine?什么是规则引擎?A Rule Engine is a software system that contains rules on behalf of another system. Many different kinds of rules can be contained in a rules engine: business, legal, company policy, navigation, computationa…

字符串匹配,KMP算法

KMP的详解见&#xff1a;https://segmentfault.com/a/1190000008575379 主要难点在于Next数组的理解&#xff0c;KMP是不需要回溯的匹配算法。 1 #include<iostream>2 #include<string>3 #include<vector>4 #define MAXSIZE 1005 using namespace std;6 /*为…

{}企业如何才能实现多方位网络营销

现在很多企业都在进行网络营销,但是网络营销取得显着效果的并不多.其中有各种原因.但是很多在网络营销方式取得显着效果的企业却都有个共同的特点,尝试了多种营销方式做多方位的网络营销.在现今网络平台多样化,网络营销竞争激烈的形式下,单一的营销模式确实无法取得好的效果,多…

关于23种设计模式的有趣见解

创建型模式 1、FACTORY —追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式…

java oracle 连接字符串函数_通过shell来比较oracle和java中的字符串使用

这些准备工作齐了之后&#xff0c;我们来从Java中的字符串使用入手来比较一下oracle中对于字符串的处理。java中有如下的一些函数&#xff0c;我会依次来做比较。public char charAt(int index)返回字符串中第index个字符&#xff1b;oracle中可以使用substr来简单实现&#xf…

Java私有构造函数不能阻止继承

下面是一个调用已经私有化的单列的函数的列子. 这里用了静态内部类&#xff0c;关键就是静态内部类可以访问外部类的私有构造函数。 这种算是变种继承吧。前提是可以在原来的单列类里添加代码。 class Single { private Single(){ System.out.println(&q…

Flask + vue 前后端分离的 二手书App

一个Flask vue 前后端分离的 二手书App 效果展示&#xff1a; https://blog.csdn.net/qq_42239520/article/details/88534955 所用技术清单 项目地址&#xff1a;项目地址 vue代码地址&#xff1a;vue代码地址 项目部分过程笔记&#xff1a; 后台&#xff1a; 项目结构 Second…

Mac OS X Glut build instructions

Mac OS X Glut build instructions(在Mac上用glut库编写OpenGL程序) Wentao Sun, Autodesk, Inc. 1. Building GLUT apps under Mac OS X There are only a few modifications you need to make to the robot.c sample to get it compiled on your Mac. These instruction…

李战java_【阿里李战】解剖JavaScript中的 null 和 undefined

在JavaScript开发中&#xff0c;被人问到&#xff1a;null与undefined到底有啥区别&#xff1f;一时间不好回答&#xff0c;特别是undefined&#xff0c;因为这涉及到undefined的实现原理。于是&#xff0c;细想之后&#xff0c;写下本文&#xff0c;请各位大侠拍砖。总所周知&…

Android -- 获取摄像头帧数据解码

由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的&#xff0c;所以解码时要经过一翻周折. Camera mCamera Camera.open();Camera.Parameters p mCamera.getParameters();p.setPreviewFormat(ImageFormat.NV21);/*这是唯一值&#xff0c;也可以不设置。有些同学可能…

跨域方法

1.jsonp,原理利用script的src属性(像img,iframe等有src属性的都支持跨域)引入js文件&#xff0c;并在引入成功后调用回调函数&#xff0c;数据通过参数的形式传过来。 例&#xff1a; 2.window.name 3.document.domain 4.h5的方法&#xff1a;window.postMessage 5.flash 6.COR…