擺脫無盡的貼坐標,自制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