摆脱无尽的贴坐标,自制CocosBuilder插件(CCBPProperties.plist详解)

首先我们来看一下完整版CCBPProperties.plist的结构:

当然,这些属性并不全是必须。

@Require

1、className和editorClassName:就像之前说过的,这两个属性代表了这个类在代码中对应的类名,通常它们是相同的。className对应的是连接到你项目里的类的类名,而editorClassName是连接到CocosBuilder的类名。在CocosBuilder里也有现成的例子,那就是CCMenu。打开CocosBuilder的工程可以看到,在这里有一个CCBPMenu的类继承了CCMenu。

至于这种写法带来什么特别便捷或者神奇的地方呢,我也不知道,哈哈。欢迎有知道的同学补充。

2、inheritsFrom:这里填的是该类的父类。这里有两条规则,1.可以任意填一个出现过的父类,以CCRotatingSprite为例(父类:CCSprite、CCNode),两者都可以填,但是CocosBuilder会以这个属性为标准去寻找继承关系,如果你填了CCNode,那么你就无法在编辑器中编辑CCSprite的属性了。

2.所填的父类必须已经在CocosBuilder中绑定过,以CCMenuItemToggle(父类:CCMenuItem、CCNodeRGBA、CCNode)为例,如果你填了CCMenuItem,那么就会出错。因为CocosBuilder中并没有绑定这个类。当然各位也可以绑定上,然后就能用了。

3、canHaveChildren:如字面的意思,能否有子节点。

4、properties:属性列表,我们在后面再做讨论。

@Optional

5、propertiesOverridden:重写的属性列表,格式与properties相同,用于重置之前定义过的默认值,例如CCMenu.ccbPlugNode在此处将初始坐标设定为了0, 0(原本是屏幕中间)。

6、spriteFrameDrop:用来定义将CocosBuilder左边的资源列表中的物件拖放到Timeline中的该类的节点上时发生的行为。这句话可能不是很好理解,举个例子(也是我看到的唯一的用法),在CCLayer的CCBPProperties.plist中如下定义

那么,当从场景中拖动一张图片到Timeline中的某个CCLayer上时,这张图片(CCSprite)将被作为子节点添加到这个CCLayer上。

7、requireParentClass、requireChildClass:非常好理解,requireParentClass的值是一个string类型,限定了这个类的父节点的类名,例如CCMenuItemImage中的requireParentClass值为CCMenu。requireChildClass是一个Array,列出了可以作为子节点的类名,因此我们之前需要把CCMenuItemToggle添加到CCMenu的该项属性中。

特别注意的是,这两个属性只会在编辑器中生效。我的建议是忽视这两个属性,特别是给自己做插件时,不然每次都得像之前那样,如果我们再制作一个CCMenuItemLabel,又要到CCMenu的requireChildClass属性下把它加上,纯属自找麻烦。编辑的时候注意一点别放错就行了。

 

Properties和propertiesOverridden的格式:

@Require

1、type:类型,这里定义了这个属性的类型,可以参考CocosBuilder/Documentation/X5. Property Types.md,属性没有太难费解的地方,这里不一一赘述。唯一需要说明的是Separator类型,这是一个分割条。

就是这种一条一条的东西。记得将各个类的属性用分割条分割出来,例如Selector和Target是CCMenuItem的属性,就得用Separator分出来,否则出错可别找我噢。

2、displayName和name:分别对应在CocosBuilder中显示的名称和在代码中对应的类名,也就是Content Size和contentSize的区别。

3、default:类型不确定,视type而定,用来设置默认值。

4、readOnly:布尔值,当true时,该项的输入栏变黑,无法输入。例如CCSprite的Content Size。

5、dontSetInEditor:即don’t set in editor,为true时,无法改变其在编辑器中的效果。例如CCRotatingSprite的secondsPerRotation如果包含此属性,那么在编辑器中改变该值,也不会让其转的速度有变化(但在实际开发中的效果会变化)。

6、platform:平台,该项只有Mac和iOS两个值(注意大小写)。

7、affectsProperties:改变某一项时,其他受影响的项。例如CCSprite中,设置sprite frame会影响content size和blend的值。

8、extra:额外的属性,同样参考CocosBuilder/Documentation/X5. Property Types.md。

posted on 2013-05-21 16:13  苹果酱  阅读(1402)  评论(1编辑  收藏  举报