在 cocos2d 项目中引入 lua_lua

这次会介绍一下如果将 Lua 引入到 cocos2d 的项目中去,以便更方便的进行游戏项目调试。

本次测试采用了最新版本的 cocos2d-iphone v1.1,最新版本代码可以从这里下载:Github。

Lua 版本采用 5.2.0,请到这里下载:Lua.org。

XCode 使用 XCode4。



前面多说一句,如果是第一次使用 cocos2d,那么请在解压 cocos2d 压缩包之后,进入终端窗口,键入“cd ”,然后将 cocos2d 的文件夹拖到终端窗口上。操作正确的话,终端窗口里面会出现该文件夹的路径,然后敲回车,直接进入该文件夹。

键入如下命令,安装 XCode 的模板。

 



sudo ./install-templates.sh


这样 cocos2d 的模板就安装好了。

将下载好的 Lua 文件包解压到一个文件夹,准备好。

然后打开 XCode,创建新项目:

在 cocos2d 项目中引入 lua_xcode_02

我们选择 cocos2d 模板,创建名为“TestLua”的项目。

可以试着运行一下,iOS 模拟器会启动,并且显示一行“Hello World”在画面中间。

这时查看输出信息,可以看到最后几行如下的跟踪信息:



2012-02-01 21:45:10.452 TestLua[2136:10a03] cocos2d: compiled with VBO support in TextureAtlas : YES
2012-02-01 21:45:10.453 TestLua[2136:10a03] cocos2d: compiled with Affine Matrix transformation in CCNode : YES
2012-02-01 21:45:10.453 TestLua[2136:10a03] cocos2d: compiled with Profiling Support: NO
2012-02-01 21:45:10.527 TestLua[2136:10a03] cocos2d: surface size: 480x320


在 XCode 界面的最左侧选择项目列表的第一行(写着“TestLua”那行),然后在界面中间下方找到“Add Target”,点击它。

在弹出的 Target 对话框中进行如下选择创建静态库的 Target:

在 cocos2d 项目中引入 lua_新版本_03

给新的 Target 命名为“Lua”,然后再回到左侧项目文件列表上,右键选择“Add Files to “TestLua””:

在 cocos2d 项目中引入 lua_新版本_04

在弹出的选择框中从   Lua 文件夹 (已将其拷贝到lua文件夹内)--》src文件夹   选择除了lua.c和luac.c文件(these are use to build standalone interpreters and compilers and are not used in library builds)之外所有.c  .h .hpp文件   

 

在 cocos2d 项目中引入 lua_新版本_05

 

link binary with Libraries   添加libLua.a

在 cocos2d 项目中引入 lua_2d_06

 

Target Dependencies   添加   Lua

在 cocos2d 项目中引入 lua_2d_07

准备工作就做好了,可以再次运行测试一下,如果一切正常,那么还会看见刚才的画面。



下面开始写测试代码。

在左侧找到 HelloWorldLayer.m 文件,将其改名为 HelloWorldLayer.mm,标识为 C++ 文件。

点击 HelloWorldLayer.mm,XCode 界面右侧就会出现源代码。找到这行:



#import "HelloWorldLayer.h"


在这行代码下面写入如下代码:



//
//
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

int runlua(void) {

lua_State *L = luaL_newstate();

// load the libs
luaL_openlibs(L);
printf("\nLua done!\n");
lua_close(L);

return 0;
}


这样,我们就加入了一段最简单的 Lua 代码到程序中。不过这还不算完,我们要调用它试验一下。

还是在 HelloWorldLayer.mm 中,找到 scene 方法,添加针对 runlua 方法的调用:



+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];

// 'layer' is an autorelease object.
HelloWorldLayer *layer = [HelloWorldLayer node];

// add layer as a child to scene
[scene addChild: layer];

// 执行 lua 方法
runlua();

// return the scene
return scene;
}


现在,试着再运行一下。

画面没有什么变化,但是看一下输出:



2012-02-01 21:45:10.452 TestLua[2136:10a03] cocos2d: compiled with VBO support in TextureAtlas : YES
2012-02-01 21:45:10.453 TestLua[2136:10a03] cocos2d: compiled with Affine Matrix transformation in CCNode : YES
2012-02-01 21:45:10.453 TestLua[2136:10a03] cocos2d: compiled with Profiling Support: NO
2012-02-01 21:45:10.527 TestLua[2136:10a03] cocos2d: surface size: 480x320

Lua done!


看到最后一行了吗?说明我们的 Lua 代码被正确执行了!这样,我们就成功实现了在 cocos2d 里面对 Lua 程序的调用。

好,现在,该去好好学习 Lua 啦。