在cocos2d-x中使用LUA
在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的更多相关文章
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-1 ...
- vs如何在C++中调用Lua
最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...
- 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 ...
- vs2013如何在C++中调用Lua(二)
Lua学习笔记 vs2013如何在C++中调用Lua (此为转载教程) 本人试过完全可行 一.准备工作 1.下载Lua源码,地址:http://www.lua.org/download.html(我用 ...
- C++中嵌入Lua脚本环境搭建
第一步(环境准备工作): 工具: ●LuaForWindows_v5.1.4-46.exe傻瓜式安装. 作用:此工具可以在windows环境下编译运行Lua脚本程序.安装完成后会有两个图标:Lua和S ...
- Qt学习笔记:Qt中使用Lua
今天想在Qt中使用Lua进行数据操作 结果发现在Qt中使用Lua的文章较少,虽然很简单,但是还是写出来提供入门,顺便记录一下 我使用的是Qt Creator 3.4.2,用的是mingw4.9.2的编 ...
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
- C中调用LUA回调(LUA注册表)
实现原理: 通过将LUA中得回调函数存入LUA注册表中来保存LUA函数,然后在需要回调时从LUA注册表中取出LUA函数进行调用 下面是一些预备知识:(学习两个重要的函数) 原汁原味的英文解释的最透彻, ...
- lua学习:游戏中的Lua
lua作为一种脚本语言,可以快速地开发游戏的原型.提高游戏的开发效率. 在游戏中,lua可以用来完成下面这些工作: ●编辑游戏的用户界面 ●定义.存储和管理基础游戏数据 ●管理实时游戏事件 ●创建和维 ...
- SLua 中使用 Lua 5.3 的编译工程
2016-03-05 更新: 之前编译的库,在 Android 下 Lua_Number 和 Lua_Integer 被编译为了32位,导致从 C# 到 Lua 过程中有64位到32位整型转换会出现溢 ...
随机推荐
- Maven项目管理工具初体验
在最前面声明,本文不涉及任何原理,只是对使用方法和期间遇到的问题如何解决.主要是随着年纪原来越大,越觉得好记星不如烂笔头的深意,同时如果能够帮助谁,那就最好不过了. 前两天自己做一个项目,然后好心朋友 ...
- TIDB 安装
https://my.oschina.net/dmdgeeker/blog/718564 SQL 层一直是用 Golang 在开发,存储引擎 TiKV 用的 Rust
- 基于WPF系统框架设计(10)-分页控件设计
背景 最近要求项目组成员开发一个通用的分页组件,要求是这个组件简单易用,通用性,兼容现有框架MVVM模式,可是最后给我提交的成果勉强能够用,却欠少灵活性和框架兼容性. 设计的基本思想 传入数据源,总页 ...
- java程序容错
程序最怕出错的方式就是直接闪退 编程应该以这种方式进行,保证结构不出错,数据可容错的方式 比如 fungetsonmfrominternet(){变量 a a=从网络返回数据 return a } 在 ...
- Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- 一种全新的自动调用ajax方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- C# 的概念
1,C#-ASP.NET C# 的概念 2,Intro ASP.NET 一,基本概念: 1,C#--语言 microsoft 开发的纯面向对象的语言,是VS2005的主流开发语言. 语言的发展 C-- ...
- 一个端口划到多个VLAN
不想启路由的情况下,希望将一个端口划到多个VLAN中去,其目的有如下几点: 1.隔离不想让相互访问的端口.(如两个部门) 2.让都需要访问的端口划到所有VLAN.(如共享服务器) 3.不启路由协议.( ...
- MySqlDataReader
本文讲述如何从SqlDataReader或MySqlDataReader中循环读取内容并输出 sqlserver和mysql的DataReader的用法完全一样,只是名字不同,以mysql为例 str ...
- 开发SharePoint 自定义WebService 的小工具
是一个开源的项目,地址:http://www.codeproject.com/Articles/10728/WSS-Web-Service-DISCO-and-WSDL-Generator-Helpe ...