cocos2dx-LuaProxy 的作用主要是让cocos2dx引擎的扩展包(extensions)binding到Lua,便于做cocos2dx-lua项目开发者们。
cocos2d-x 2.1.4
cocos2dx-LuaProxy
Cocosbuilder 3.0 a
有关cocos2d-x 2.1.4 环境搭建,我这里不详细描述了。网上有很多教程。重点还是cocos2dx-LuaProxy环境搭建:
下载 cocos2dx-LuaProxy 解压后如下图:
接下来介绍如何使用cocos2dx-luaProxy
第一步:将我们解压后的cocos2dx-luaProxy文件下的LuaProxy放入我们项目的class文件,如图:
第二步:把LuaProxy文件下的luaEventHandler.cpp、luaEventHandler.hpp、luaProxy.hpp、LuaTable.hpp、tolua文件与ui文件加入我们项目中。
加入后,如果你立即使用Xcode进行build编译,会发现报错。(windows下应该不会),错误如下图:
通过错误信息可以清晰的看到是我们刚导入的 cocos2dx-LuaProxy框架下的luaEventHandler类的问题, 如图
enum class 是C++ 元件扩充功能,可能xcode不支持吧。(window 下应该不会吧。)
那么简单处理下:
把 enum class 直接更改这样。
同时,记得把引用它的成员的Events变量名去掉,如:Events::KeyBack 直接改成keyBack即可。
按官方搭建cocos2dx-LuaProxy (cocos2d-x 2.1.4),还有一个要求:
呵呵,就直接把lib/cocos2d/lua/cocos2dx_support(4 files):CCBProxy.h, CCBProxy.cpp, Lua_extensions_CCB.h, Lua_extensions_CCB.cpp 去掉。
编译成功后(cocos2dx-lua工程),如图
打开CCAppDelegate.cpp,添加头文件 "#include "luaopen_LuaProxy.h" , 在applicationDidFinishLaunching()添加如下代码:
// register lua engine CCLuaEngine* pEngine = CCLuaEngine::defaultEngine(); CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine); CCLuaStack *pStack = pEngine->getLuaStack(); lua_State* L = pStack->getLuaState(); luaopen_LuaProxy(L);
有关cocosbuilder 3.0 a 使用方法,可参考下:http://blog.csdn.net/bill_man/article/details/7981427
我直接用默认创建文件MainScene.ccbi做例子。这是publish后生成的文件,如图
直接拖到项目中,接着编写绑定cbbi文件,代码:
-- for CCLuaEngine traceback function __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg) .. "\n") print(debug.traceback()) print("----------------------------------------") end local function main() -- avoid memory leak collectgarbage("setpause", 100) collectgarbage("setstepmul", 5000) local cclog = function(...) print(string.format(...)) end --------------- local function createTest() local TestLayer = CCLayer:create() local proxy = LuaProxy:create() local n = proxy:readCCBFromFile("MainScene.ccbi") -- Got a CCNode local l = tolua.cast(n, "CCLayer") -- Cast the node into CCLayer TestLayer:addChild(l) return TestLayer end -- run local sceneGame = CCScene:create() sceneGame:addChild(createTest()) CCDirector:sharedDirector():runWithScene(sceneGame) end xpcall(main, __G__TRACKBACK__)
三、效果图
如有错误之处,希望大家多多纠正!
转载请注明出处:http://blog.csdn.net/rexuefengye/article/details/16336351