[zz]cocos2d-x-2.2.0版本的CocoStudio的GUI绑定到lua
所有testcpp里的widget示例都已实现,实现了一个GuiExample,其他的就留给大家去熟悉.其实无非就是将c代码拷贝到lua里然后修改一点...
使用步骤:
1.解压下载包
2.将extensions下的Cocostudio/GUI文件夹备份,然后用解压的GUI文件夹覆盖原文件夹
3.将tools/tolua++文件夹备份,将pkg.zip解压到tools/tolua++下,然后运行命令行编译出LuaCocos2d.cpp(这步编译不会的...去百度)
4.编译cocos2d-x工程,就可以在lua里使用Cocostudio的GUI里的类了
使用Hellolua工程跑示例程序:
将bin下面的所有文件夹和lua拷贝到samples\Lua\HelloLua\Resources下
将hellolua项目里的AppDelegate.cpp的函数applicationDidFinishLaunching()修改一下
- bool AppDelegate::applicationDidFinishLaunching()
- {
- // initialize director
- CCDirector *pDirector = CCDirector::sharedDirector();
- pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
- CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionNoBorder);
- // turn on display FPS
- pDirector->setDisplayStats(true);
- // set FPS. the default value is 1.0/60 if you don't call this
- pDirector->setAnimationInterval(1.0 / 60);
- // register lua engine
- CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
- CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
- std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hellogui.lua");
- pEngine->executeScriptFile(path.c_str());
- return true;
- }
然后run
lua中UIWidget注册回调函数的方法
UIWidget :registerEventScript
lua回调示例这样 (这里和v2.1.5不一样,多返回了一个调用者的UIWidget类型的指针)
- function HandleEvent(type,widget)
- if type == "pushDown" then
- -- do something
- end
- end
现有eventType为
"pushDown"
"move"
"releaseUp"
"cancelUp"
"longClick" (这个studio还未实现)
"selected"
"unSelected"
"percentChanged"
"attachWithIME"
"detachWithIME"
"insertText"
"deleteBackward"
"berthToLeftBottom"
"berthToLeftTop"
"berthToRightBottom"
"berthToRightTop"
"berthToLeft"
"berthToTop"
"berthToRight"
"berthToBottom"
"bounceOver"
"bounceToLeftBottom"
"bounceToLeftTop"
"bounceToRightBottom"
"bounceToRightTop"
"bounceToLeft"
"bounceToTop"
"bounceToRight"
"bounceToBottom"
"initChild"
"updateChild"
"scrollToTop"
"scrollToBottom"
"scrollToLeft"
"scrollToRight"
增加CCSSceneReader绑定
使用方法:
1.先备份tools/tolua++文件夹然后将补丁解压到tools/tolua++下
2.运行命令行编译出LuaCocos2d.cpp
3.将工作项目链接pthreadVCE2.lib和libchipmunk.lib库,编译即可
更新日志:
11.13 目前getChild有一个错误,无法返回LabelAtlas的控件,修改UILabelAltas的源码函数
const char* UILabelAtlas::getDescription() const
{
return "LabelAtlase"; //去掉后面那个e
}
或者直接修改ccs的lua库,CCSLayerExtend里的local widget_name,["LabelAtlase"] = "UILabelAtlas", --加上e
前段时间,无意有人提到能否把前面gui的lua绑定封装到quick里,然后就去看了下quick.觉得真心强大.就研究了下quick,然后顺利完成了ccs的gui库的封装.继承了quick的风格.
很不幸的是,本来准备将代码pull到quick的,但是quick作者在develop分支中去掉了对ccs的支持,并且不打算支持ccs.加之最近项目启动了没有多少时间来搞一套quick的,就先把现有的一些东西分享出来吧.
封装其实很简单,就是在原来基础上扩展了一点点的内容.
注意:本封装不支持quick,即时你将lua拷入quick,也使用不了.
现有功能.
1.读取一个ui到lua中
- local layer = ccs.newLayer("testUI/testUI.json")
2.获得一个layer中的控件.比如UIButton
- local button = layer:getButton("test_button")
或者
- local button = layer:getChild("test_button")
getChild会自动返回child的类型
3.可以将一个ui中的所有checkbox分组
- function CCSLayerExtend:insterGroup(groupId,...)
- ...
- end
组checkbox回调时调用
- function CCSLayerExtend:GroupSelected(groupId,checkbox)
- ...
- end
设置默认开启的checkbox
- function CCSLayerExtend:GroupDefault(groupId,checkbox)
- ...
- end
使用本代码前,先绑定ccs到lua,http://blog.csdn.net/rrobin/article/details/12101349
本来不打算随c2dx的版本更新再同步发布ccs的绑定的...但这一次将ccs的api封装到了lua,所以就一并放出来吧.
然后是lua封装以及示例.
由于放出比较急,没有api文档,大家就自己去看framework文件夹吧,新的UIListViewEx没有示例,因为2.2.1版本官方也没有示例...