2012-07-23 50 views
0

我有一個GameScene類,在初始階段我製作一個場景並附上一個孩子 - 一層。我注意到它的奇怪代碼:爲什麼在cocos2d中奇怪的聲明瞭CCLayer?

CCScene *scene = [CCScene node]; 
    CCLayer *layer = [GameScene node]; 
    [scene addChild:layer]; 

爲什麼不這樣做呢?

CCLayer *layer = [CCLayer node]; 

這不會增加可讀性,還是我缺少一些基本的東西?另外,爲什麼不使用alloc init呢?

回答

2
[CCNode node]; 

是一種靜態(類)方法。它會自動調用[[[self alloc] init] autorelease];

任何CCNode子類都可以使用此靜態初始化程序進行初始化。這基本上是爲了方便,並非真正需要。 (雖然,就像我說的那樣,很高興有)。

類方法使用「+」號,實例方法使用「 - 」號。類方法就像Java中的靜態方法。可以在不創建該類的實例的情況下調用它們。 它可能看起來像這樣:[YourClass doSomething]; //Doesn't need an instance of YourClass

實例方法需要它們的類的一個實例才能運行。這看起來像:

YourClass *yClass = [[YourClass alloc] init]; 
[yClass doSomethingElse]; //Needs an instance of YourClass 

我沒有看過,但我承擔node方法看起來是這樣的:

+ (CCNode*)node { 
    return [[[self alloc] init] autorelease]; 
} 

奇怪的聲明只是返回一個場景(有一個靜態初始化初始化)將您的自定義圖層作爲孩子,然後CCDirector可以使用並顯示。

編輯:我覺得會增加清晰度。

奇怪的聲明只是一個靜態初始化程序+ (CCScene*)scene,它返回一個場景。