CocoStudio测试详尽解析

  

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

  

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

  

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

  

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

  

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

  

,

  

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

  

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

  

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

  

 CocoStudio测试详尽解析

  

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

  

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

  

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

  
  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>  <李>  <李类=癮lt”>   
  

  

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

  

  

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

  

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

  

因为这句话的存在

  

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

  

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

  

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

  

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

  

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

  

然后就是把控件添加到当前场景中:

  

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

  

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

  

  

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

  

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

  

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

  

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

  

比如对象:

  

  

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

  

  

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

  

最后就是一个骨骼动画了

  

cs: BatchNodeManager: sharedBatchNodeManager ()→initWithLayer(这一点,“TEST_LAYER");

  

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

CocoStudio测试详尽解析