但是Cocos的Lua社区太庞大了。Cocos Creator本身的插件架构是允许随意扩展的,所以增加一个Lua扩展在技术层面并不难,难的在多一种编程语言之后的维护:
- 增加Lua中英文文档教程
- 增加Lua API文档
- 增加Lua测试例
- 增加每个版本发布前的Lua测试
- 增加Lua的论坛技术支持
这些因为『多一门编程语言所带来的维护成本』这些才是大头。不过如果这个成本投入可以换来足够多的开发者数量,那么也就值得了。
使用cocos2dx-lua开发,免不了自己定义类,但是如何使用自定义的类的?先了解下lua如何调用c++的:lua脚本代码->通过coocs2dx中间解析层代码->将其转换并调用cocos2dxc++的前端代码coocs2dx中间解析层代码都在libs/lua/cocos2dx_support/LuaCocos2d.cpp这个文件中,想了解的可以自己去看下这个文件。也就是说,你自己定义了一个类,lua能够调用你自己定义的类,你的自定义类就必须在LuaCocos2d.cpp这个中间解析文件中申明。看了LuaCocos2d.cpp这个文件,可能有的同学都晕了,不知道怎么在LuaCocos2d.cpp中申明自己的定义的类。不过,不用担心,cocos2dx已经提供了tolua++这个工具自动编译生成新的LuaCocos2d.cpp文件。下面开始进入正题。一、创建一个coocs2dx-lua的Demo工程,然后在class中自己定义个类。SNSprite.h[/cpp]////SNSprite.h//LuaDemo////CreatedbyLiuYanghuion13-4-8.////#ifndef__LuaDemo__SNSprite__#define__LuaDemo__SNSprite__#include“cocos2d.h”USING_NS_CCclassSNSprite:publicCCSprite{public:staticSNSprite*create(constchar*name)private:voidinitData()}#endif/*defined(__LuaDemo__SNSprite__)*/[/cpp]SNSprite.cppC++localfunctioncreateSunnyLayer()locallayerSunny=CCLayer:create()locallabTips=CCLabelTTF:create("这个icon图标就是使用的自定义类","Arial",18)labTips:setPosition(ccp(240,280))layerSunny:addChild(labTips)localsp=SNSprite:create("Icon.png")sp:setPosition(ccp(100,100))layerSunny:addChild(sp)returnlayerSunnyend--playbackgroundmusic,preloadeffect添加到scene中:C++--runlocalsceneGame=CCScene:create()--创建场景--sceneGame:addChild(createLayerFarm())--将农场层加入场景--sceneGame:addChild(createLayerMenu())--将菜单界面层加入场景sceneGame:addChild(createSunnyLayer())CCDirector:sharedDirector():runWithScene(sceneGame)OK,xcode编译运行,就看到效果了。第一种方式是调用的时候提示找不到这个接口,但你查看C++会发现明明有这个接口,那么问题在哪呢?原因是在做luabinding的时候配置文件中忽略了一些接口,也修改了一些接口在lua层的命名,那么哪里看呢?所有自动生成的binding文件都在quick根目录的tools/tolua/这个文件夹里,也就是那些ini文件,我们打开cocos2dx.ini内容我就不贴了,这里需要关注的是这两个部分:搜索skip=Node,你看到一大堆内容,下面截取一段skip=Node::[setGLServerStatedescriptiongetUserObject.*UserDatagetGLServerState.*schedulegetPosition$setContentSizesetAnchorPointenumerateChildrengetonEnterTransitionDidFinishCallbackgetOnEnterCallbackgetOnExitCallbackgetonExitTransitionDidStartCallbacksetAdditionalTransform.*(Physics).*],Sprite::[getQuadgetBlendFunc^setPosition$setBlendFunc],SpriteBatchNode::[getBlendFuncsetBlendFuncgetDescendants],MotionStreak::[getBlendFuncsetBlendFuncdrawupdate],欢迎分享,转载请注明来源:内存溢出
评论列表(0条)