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脚本已经完全可以正常运行。


接下来我要继续后面的研究了。

0 0
原创粉丝点击