2012-07-20 116 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

我所知道的是,它不是必需的,我想知道同样的事情。我认为这是因为他们想鼓励场景的使用。你的场景应该由层组成,你应该在场景之间切换。

相关问题