基于cocos2dx 2.2.2版本。这几天使用了cocostudio实现了,动画,骨骼动画,UI编辑,粒子效果,虽然有些不足,但已经算是非常好了。今天尝试用lua,这个非常简单,创建的时候,设置语言为lua,那就可以创建lua工程。
在cocos2d-x-2.2.2\tools\project-creator下运行:
python create_project.py -project test_lua -package com.android.zdhsoft -language lua
xcopy ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\test_lua\proj.android\src /E
就可以创建test_lua,就可以顺利跑起来。
但是我有些代码是C++的,想到在lua下用,感觉得用cocos2dx自带的tolua++,会影响现有的Cocos2dx框架,也可能带来潜在的风险。(除了,bug,我一般不乐意修改框架的东西)。而且需要手动绑定的也不多。于是找了几个开源的绑定框架。有luabind,luatinker,ELuna,luabridge,等。luabind需要boost库,这个太头痛了,luatinker,eluna在试用过程都有些问题(有一个不支持派生类和模板),虽然这两个是最简单的,但是功能也弱了些。最后,用luabridge顺利解决,使用起来也非常简单。
下面是下载地址:
https://github.com/vinniefalco/LuaBridge
这个版本已经支持lua 5.1.5,不过不支持C++0x11,例子很丰富。这里有很多例子,
http://vinniefalco.com/LuaBridge/Manual.html
下载后,直接解压,把LuaBridge.h,RefCountedObject.h,RefCountedPtr.h和detail下的所有头文件,全部复制到classes目录,然后在AppDelegate包含luabrigde.h就可以了。
下面是一个用于测试的类
class testA
{
public:
testA()
{
}
int getValue()
{
return 100;
}
};
下面是绑定代码
luabridge::getGlobalNamespace(pEngine->getLuaStack()->getLuaState())
.beginClass<testA>("testA")
.addConstructor<void(*) ()>()
.addFunction("getValue", &testA::getValue)
.endClass();
然后,就可以在你的lua代码使用这个类了。
local testa = testA ()
cclog("testa=%d", testa:getValue())
现在cocos2dx上面,现在出现了两个重要的lua分支, 一个是quickx,一个cocos-code-ide。quickx提供了一个非常强大的lua框架,让你写lua省心省力。而cocos ide则基于eclipse提供了一个x-man的编辑器,支持lua和js调试。这让C++情何以堪啊!