CocoStudioTest详尽解析-创新互联

CocoStudio工具的发布让人振奋(虽然还有不少的问题,但是瑕不掩瑜)

成都创新互联是一家集网站建设,弓长岭企业网站建设,弓长岭品牌网站建设,网站定制,弓长岭网站建设报价,网络营销,网络优化,弓长岭网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

不得不说,作为只有Windows电脑的屌丝能有这么好的免费开发工具确实很开心

但是作为一款刚发布的工具,官方自己也在赶制使用教程,使用上还是有一定难度的。

由于官方正在赶制使用Editor的视频,这里我就不说这方面的问题了,想看可以去下面网址观看:

http://i.youku.com/u/UNTk3MDQ4NzA0(截止今天只有两部,分别是动画与UI编辑器的)

我想看了如上视频对于如何使用该工具有了一个大概的了解,但是也会有一个疑问,那就是该工具导出的文件如何使用,尤其是.json文件。

好在官方有一个test让我们参考,接下来就来分析下这个官方的test(可以在 http://www.cocos2d-x.org/projects/studio/wiki 下载到,这是官方地址)

先看看运行效果(我个人认为还比较有爱):

CocoStudio Test 详尽解析

这个Test相较于一般的Cocos2d-x程序多了两个库,第一个是UI库,第二个是动画库(我是这么认为的)。

由于该Test中只用到了很少一部分动画库(我简要看了一下之后发现确实也只需要这部分就可以显示动画了,其他很多接口都是它内部调用的而已)而没有任何文档说明,所以就没仔细看动画库,转而仔细研究了下UI库。

那么先来看一下HelloWorldScene.cpp的init代码吧

  1. bool
  2. // 1. super init first
  3. if
  4. returnfalse
  5. //COCOUISYSTEM->resetSystem(this);
  6. this"CocoGUISample.json"false
  7. "CloseNormal.png""CloseSelected.png"""
  8. true
  9. this
  10. "scrollview"
  11. true
  12. "backtotopbutton"
  13. this
  14. "slider"
  15. this
  16. "animationbutton"
  17. this
  18. this"TEST_LAYER"
  19. "TestBone""""TestBone0.png""TestBone0.plist""TestBone.json"
  20. "TestBone"
  21. returntrue

COCOUISYSTEM这是一个宏,用来获取一个UISystem对象:#define COCOUISYSTEM CocoGUI::UISystem::shareSystem()

这个UISystem之后再说,往下继续看

COCOUISYSTEM->resetSystem(this); 这一段本来是没有注释的,但在这里确实是没有任何作用的一段代码

这个resetSystem是用来重置当前场景的UI的(注意,是重置CocoStudio的UI,你自己添加的任何普通对象都会保留)有兴趣可以去看一下这个的源码,这里就不贴了

resetSystem用来作为初始化时的重置是没任何问题的,但是为什么说它在这里没用呢?

因为这句话的存在COCOUISYSTEM->replaceUISceneWithFile(this, "CocoGUISample.json", 1, false);

replaceUISceneWithFile之中调用也调用过一次resetSystem,所以说resetSystem是重复多余的

replaceUISceneWithFile的作用就是通过json载入编辑器做好的UI

其四个参数分别是UI目标,也就是添加UI的对象指针,配置文件,读取方式(1为json文件,0为plist文件),最后一个是是否允许自适应。

后面几行是生成一个CocoButton,也就是CocoStudio自己的UI控件

这里要说一下,CocoButton的控件几乎都是自己重写的,不继承于Cocos2d-x的控件,其触碰分派也是独立的,这里以后再说。

然后就是把控件add到当前场景中:COCOUISYSTEM->getCurScene()->addWidget(closeButton);

前面说过了,这些空间都是重写的,而且不是继承于CCNode,所以不能直接用addChild来add,而是通过UISystem来add,并且通过UISystem来管理的,也就是说Remove也不是通过this.remove而是通过COCOUISYSTEM->getCurScene()->removeWidgetAndCleanUp

后面的几行差不多,就说下第一行

CocoGUI::CocoScrollView* sc = (CocoGUI::CocoScrollView*)(COCOUISYSTEM->checkWidgetByName(COCOUISYSTEM->getCurScene()->getRootWidget(), "scrollview"));

这一行就是关键中的关键了,在UI编辑器中只能编辑样子,不能添加事件,时间的添加只能在代码中添加,而获取对象则是添加的关键。

CocoStudio就是通过UISystem中的checkWidgetByName来获取对象的

其参数分别为:当前场景的rootwidget和对象名称(UI编辑器中使用的)

这样就可以对控件进行一系列修改,也包括最重要的添加事件了

比如CocoTextButton对象:

bt->addReleaseEvent(this, coco_releaseselector(HelloWorld::backToTop));

当然了,不同的对象是不一样的,比如CocoSlider就是

sld->addPercentChangedEvent(this, coco_percentchangedselector(HelloWorld::sliderPercentChanged));

这个要靠大家自己根据情况来定了

最后就是一个骨骼动画了

cs::BatchNodeManager::sharedBatchNodeManager()->initWithLayer(this, "TEST_LAYER");

这是创建一个BatchNodeManager对象(其实准确来说是在HelloWorld层中创建了一个名为TEST_LAYER的对象)用来管理BatchNode(继承于CCSpriteBatchNode,这个的作用就不用多说了吧)

cs::ArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("TestBone", "", "TestBone0.png", "TestBone0.plist", "TestBone.json");

终于开始创建动画了,可以看得出来,这个动画是直接加入到动画管理器中的,要用的时候通过名字从动画管理器中获取相应动画

armature = cs::Armature::create("TestBone");

然后设置一些属性

armature->getAnimation()->playByIndex(0);

armature->setScale(0.3);

armature->setPosition(300, 0);

addChild(armature);

playByIndex这个的作用就是从第n幅图片开始播放,这里是从0开始

从使用addChild就可以看出来,Armature继承于CCNodeRGBA

整个Test大致包含了这么多内容,其他的需要等官方给更多的Test或者文档或者直接看源码来了解了。

如果官方明天没有给出文档的话(当然我觉得不太可能)我想说一下我对于UISystem的一些小领悟,如果官方给出文档的话,我就不献丑了= =

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站标题:CocoStudioTest详尽解析-创新互联
文章分享:http://myzitong.com/article/dcpsps.html