cocos2d-x 3.7 C++ 使用lua做脚本
来源:互联网 发布:windows xp目前哪个好 编辑:程序博客网 时间:2024/05/29 16:10
首先给很多不了解为什么要用lua做脚本的同学普及一下。
举个例子。
我们开发一款游戏。比如现在最火热的lol。大家都知道,每隔一段时间,官方都会对某一个或多个角色进行调整。
这时候放到我们手机游戏中是什么样子的呢?几十个角色,每次调整都要升级一次应用的版本,然后等待审核,然后用户下载更新。。。。
天啊。想想就可怕。但是lua有一种我们称之为“游戏脚本热更新”的机制,保证了我们遇到这种情况,不需要升级版本。而是简单的更新下lua或者资源就可以了。
当然还有其他情况,比如更新皮肤包。举行一个七夕活动等等等等。
下面为正文。
我知道创建项目的时候直接选择语言lua就可以使用cocos2d-x写好的lua引擎。
但是,还是有很多情况下,我只是单纯的想要在c++语言下把lua当作一个纯粹的脚本来使用。
我不需要用lua做页面,不需要lua如何如何。它仅仅只是一个脚本。我使用lua实现一些游戏上的逻辑等等。
这个时候,可能我或者其他很多人都不希望创建一个lua语言的项目。那么怎么办呢?
请往下看。
以下所有操作是在mac系统下,使用xcode进行的
首先,去lua官网下载最新的lua包。http://www.lua.org 截至到目前为止,我下的released版本是5.3.1
下成功后,会有一个lua-5.3.1.tar的压缩包。解压缩。
然后进入命令行,进入到解压后的根目录。如下:
执行命令 make macosx
成功后,进入src目录。会发现生成出来很多新的文件。最主要的一个就是liblua.a 这个文件如果没有的话,就不必看下面的了。
然后新建cocos2d-x项目,语言选择cpp
初始的文件结构应该是下面这样的。
接下来选择
File->New->Target创建一个静态库
不同xcode的版本,这里显示的有可能会不一样。但是总归都是要创建一个静态库就是了。创建完后,目录结构应该是下面这个样子的
这时,我们把刚才lua解压缩包里的src文件夹拖动到lua文件夹下
拖动后,应该出现下面这个界面
默认是勾选上的,把勾去掉。然后点击Next。
注意我的选择,Add to targets:选择lua。不要选择了之前的rontest-mobile。(之前测试的时候,貌似如果选了会有问题)
接下来,看图说话。按照1,2,3,4的步骤。最后点击步骤4上的+号
接下来选择刚才的静态库下面的liblua.a然后点击Add
到目前为止,如果和我的步骤一样,那么lua库就已经成功导入进来了。
接下来就是写代码了
除了红框里的,其他的都是默认代码
extern "C" {#include <lua.h>#include <lualib.h>#include <lauxlib.h>};
编译运行,如果没有报错,说明之前我们的操作都成功了。lua库也确实成功导入进来。如果报错...那就要看具体情况了。之前测试的时候,我也遇到各种问题。后来都百度掉了。
加上红框中的代码。代码如下
std::string lua_file = FileUtils::getInstance()->fullPathForFilename("hello.lua"); lua_State* pL = luaL_newstate(); luaL_openlibs(pL); /* 1.执行Lua脚本,返回0代表成功 */ int err = luaL_dofile(pL, lua_file.data()); CCLOG("open : %d", err); /* 2.重置栈顶索引 */ lua_settop(pL, 0); lua_getglobal(pL, "myName"); /* 3.判断栈顶的值的类型是否为String, 返回非0值代表成功 */ int isstr = lua_isstring(pL, 1); CCLOG("isstr = %d", isstr); /* 4.获取栈顶的值 */ const char* str = lua_tostring(pL, 1); CCLOG("getStr = %s", str); lua_close(pL);
注意lua_file这个地方。之前我用 luaL_dofile(pL, "hello.lua");无论把这个hello.lua文件放到哪里都找不到文件。最后发现必须获取到完整的路径才可以。
当然,考虑到我对cocos2d-x和c++的了解都不是很深入,我可以很确定,还会有其他的方式实现。
res文件夹下创建hello.lua文件。
hello.lua
myName = "Ron"
代码非常简单。运行出现下面结果
我是用cocos studio建立的项目,如果是命令行建立的项目,有可能找不到res文件夹下面的hello.lua文件。这时候加上下面这句命令就可以了。
FileUtils::getInstance()->addSearchPath("res");
到此为止,cocos2d-x 的c++语言使用lua脚本已经完全可以正常运行。
接下来我要继续后面的研究了。
- cocos2d-x 3.7 C++ 使用lua做脚本
- Cocos2d-x中使用Lua脚本
- 创建cocos2d-x lua并使用一个lua脚本
- Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本
- Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本
- Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本
- Cocos2d-x教程 Lua脚本(1) 如何在Cocos2d-x中使用Lua脚本
- quick-cocos2d-x使用luajit编译lua脚本
- (三)cocos2d-x中通过lua脚本使用ccbi
- 如何在Cocos2d-x中使用Lua脚本
- Cocos2d-x使用Luajit将Lua脚本编译
- 【学习笔记】【Cocos2d-x Lua脚本开发】如何使用Lua脚本调用自定义类
- quick-cocos2d-x 导出 C/C++ API 给 Lua 使用
- Cocos2d-x-Lua 游戏中使用Lua脚本进行游戏开发
- cocos2d-x 中使用lua
- Cocos2d-x lua shader使用
- Cocos2d-x lua 使用定时器
- cocos2d-x lua 使用ListView
- C# VS 2010 创建、安装、调试 windows服务(windows service)
- apache的https访问配置
- ToggleButton
- HDU-1102 Constructing Roads(最小生成树[Prim])
- Android笔记(二)LogCat
- cocos2d-x 3.7 C++ 使用lua做脚本
- Android自定义布局
- 阅读方法
- 求一个整数的所有位相加之和
- 黑马程序员---java基础之集合Set
- Redis在windows下的安装使用
- ACM_阶段性总结 ACM_动态规划(DP)
- 线段树(求矩形并,交,并减交的面积)
- 堆排序