2012-07-20 81 views
1

很多例子CCLayer子類的我看到有一些代碼,看起來像這樣:這是什麼+(CCScene *)場景?

+(CCScene *) scene{ 
    CCScene *scene = [CCScene node]; 
    HelloWorldLayer *layer = [HelloWorldLayer node]; 
    [scene addChild: layer]; 

    return scene; 
} 

誰調用這個方法和它起什麼作用?它需要在那裏嗎?爲了未來的目的而方便嗎?

回答

1

是的,它是必要的。此方法在ApplicationDelegate的applicationDidFinishLaunching方法中調用。例如,在HellowWorld模板中,它在AppDelegate的這一行中被調用: [[director_ pushScene: [HelloWorldLayer scene]]

ccDirector只能運行CCScene,並且一次只能運行一個CCScene。這就是爲什麼CCLayer首先創建一個CCScene,然後將它自己作爲一個孩子添加到它的原因。 作爲替代方案,你也可以繼承CCScene,並通過覆蓋其init方法這樣添加CCLayers和等它:

-(id) init { 
    if (self = [super init]){ 
    CCLayer *aLayer = [CCLayer node]; 
    [self addChild: aLayer]; 
    .... 
    } 
return self; 
} 

和AppDelegate中的applicationDidFinishLaunching方法與此[[director_ pushScene: [myScene node]]替換此行[[director_ pushScene: [HelloWorldLayer scene]]

+1

不,不是真的。您也可以[[director_ pushScene:[SomeLayer節點]],只是模板選擇使用場景方法。 CCNode,CCLayer,CCScene幾乎是同一個類(在CCScene.h中讀取註釋),你可以運行沒有場景的圖層。 – 2012-07-22 20:22:22

0

我所知道的是,它不是必需的,我想知道同樣的事情。我認爲這是因爲他們想鼓勵場景的使用。你的場景應該由層組成,你應該在場景之間切換。

相關問題