摆脱无尽的贴坐标,自制CocosBuilder插件(一)


0、

  相信很多使用Cocos2d系列引擎的开发者,都被制作UI、贴坐标这件事折磨得苦不堪言。现在Cocos2d系引擎都还很年轻,可视化的编辑工具并不完善,主流的界面编辑器有CocosBuilder以及触控的CocosStudio等。但实际上,这两者都还没被广泛用在实际的开发中。其中CocosBuilder被认为最大的鸡肋在于控件的可扩展性上。但其实,作为开源项目,CocosBuilder提供了足够的手段让我们扩展它。接下来通过这个教程,将告诉大家如何扩展CocosBuilder。

1、

本文适用与符合以下几点的读者:

@Require

a. 使用Mac平台+XCode开发;

b. 熟悉Objective-C。

c. 熟悉Cocos2d-iPhone或Cocos2d-x;

d. 熟悉CocosBuilder。

 本文包含以下内容:

a. 使用CocosBuilder的CCRotatingSprite控件扩展CocosBuilder;

b. 扩展引擎控件CCMenuItemToggle;

c. 详解CCBPProperties.plist文件。

2、

  在GitHub(https://github.com/cocos2d/CocosBuilder)上下载最新版本的CocosBuilder源码,然后打开并编译的CocosBuilder/PlugIn Nodes/CCRotatingSprite工程,得到CCRotatingSprite.ccbPlugNode。将CCRotatingSprite.ccbPlugNode复制到CocosBuilder.app/Contents/PlugIns目录下,并重新打开CocosBuilder,在标题栏右边,就可以往项目里添加这个控件了。

CCRotatingSprite是一个在不断旋转的Sprite。添加完控件后,还可以看到CocosBuilder很人性化地在编辑器内也运行了旋转的动画。

单击节点树中的CCRotatingSprite,我们还可以看到该类的所有可编辑属性。其中包括了其父类CCNode和CCSprite的属性,以及其自身的属性Sec/rotation。这个属性是CCRotatingSprite的转动频率,我们不妨把它改成0.1看看(鬼畜的)效果。

那么这个CCRotatingSprite是怎么制作的呢?接下来就是重点了。打开CCRotatingSprite.h文件,可以看到,在这里声明了secondsPerRotation这个变量。

@property (nonatomic,assign) float secondsPerRotation;

在CCRotatingSprite.m中,重写了setSecondsPerRotation方法。也就是说,每次通过self.secondsPerRotation,都会调用setSecondsPerRotation,开启旋转的动作。

- (void) setSecondsPerRotation:(float)spr

{

    secondsPerRotation = spr;

    

    // Stop rotating

    [self stopAllActions];

    

    // Rotate with the new speed

    [self runAction:[CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration:spr angle:360]]];

}

这个就是CCRotatingSprite能在CocosBuilder中旋转的秘密了。

接下来,通过CCBPProperties.plist文件,将这些属性绑定到CocosBuilder中,让它可以被编辑。

CCBPProperties.plist是CocosBuilder插件必备的一个配置文件,它有特定的属性和格式供CocosBuilder识别。。现在只对用到属性作简单介绍,读者如果不是很明白,没有关系,在下一步自制控件中,我们将全面的介绍CCBPProperties.plist中的属性,这里只要了解即可。

InheritsFrom是CCRotatingSprite的父类,毫无疑问,填上CCSprite。

canHaveChildren,如字面的意思,表示CCRotatingSprite类是否能拥有子类。

className是在你的工程中使用时对应的类名,editorClassName是在CocosBuilder中对应的类名。这两者通常相同,但也有不同的情况。

properties是一份属性列表。

第一个属性是一个Separator类型,displayName是在CocosBuilder中显示的名称,name是在代码中对应的名称,dontSetInEditor即don’t set in editor。

第二个属性会更容易理解一些。一个Float类型的值,在CocosBuilder中显示的名称(displayName)是Sec/rotation,对应到代码中的名称(name)是secondsPerRotation。我们在CCRotatingSprite.m的init方法中将其设置为2了,因此在CocosBuilder中出现的初始值也会是2。

这里特别注意的是,如果我们写错属性、拼错单词等等问题,都可能导致属性无法在CocosBuilder中显示出来,而且不会有任何的错误输出,还真是很不友好呢。

 

  摆脱无尽的贴坐标,自制CocosBuilder插件(二) http://www.cnblogs.com/Ringo-D/archive/2013/05/21/3090949.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM