在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位整型转换会出现溢 ...
随机推荐
- linux 项目管理、服务器管理、服务器维护
代码打包:tar -zcvf ImOra.3.2.6.tgz --exclude=Public/.htaccess --exclude=Apps/Demo Apps/ Config/ Shell/ L ...
- https://www.cnblogs.com/netoxi/p/7258895.html
https://www.cnblogs.com/netoxi/p/7258895.html 应用服务和数据服务分离 需求/解决问题 随着网站业务的发展,越来越多的用户访问导致性能越来越差,越来越多的数 ...
- angular js 使用$location问题整理
angular js 自带的$location方法十分强大,通过使用$location方法.我们能够获取到server的port.杂乱连接中的path()部分(/所包括的部分). 例: // give ...
- 【2048小游戏】——CSS/原生js爬坑之纯CSS模态对话框&游戏结束
引言:2048小游戏的结束界面,使用纯CSS制作模态对话框,一般做模态对话框都会使用BootStrap自带的模态对话框组件方便使用,但在制作要运行在移动端的小项目时,就不能使用BootStrap,因为 ...
- log4j.properties(信息打印)
### set log levels ###log4j.rootLogger = INFO , console , debug , error ### console ###log4j.appende ...
- Web自动化测试框架改进
Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 一.适用范围:传统Web功能自动化测试.H5功能自动化测试 ...
- @Cacheable注解在spring3中的使用-实现缓存
转: http://blog.csdn.net/chenleixing/article/details/44815443 在软件开发中使用缓存已经有一个非常久的历史了.缓存是一种很好的设计思想,一旦 ...
- HDU 4927 大数
题意非常easy: 对于长度为n的数.做n-1遍.生成的新数列: b1=a2-a1 b2=a3-a2 b3=a4-a3 c1=b2-b1 c2=b3-b2 ans=c2-c1 最后推出公式: ...
- KVO(1)
#import "ViewController.h" @interface ViewController () @property(nonatomic, strong)UIButt ...
- ehcache缓存刷新问题
ehcache可以设置时间来定时刷新缓存,但是这个只是清空值,key依旧保存着. 只有你第一次利用key获取值,key才会释放.