Cocos2d iphone cocos2d iphone中的“CCScene的Subclass”和“CCNode的Subclass”有什么区别?

Cocos2d iphone cocos2d iphone中的“CCScene的Subclass”和“CCNode的Subclass”有什么区别?,cocos2d-iphone,spritebuilder,Cocos2d Iphone,Spritebuilder,添加新的cocos2d CCNode类时,CCScene的子类和CCNode的子类之间有什么区别?我在学习cocos2d教程时使用了CCScene,但在cocos2d+SpriteBuilder项目中,默认的MainScene类是node的子类,所以有人能给我解释一下吗?很少。打开CCScene的头文件,您会看到它是CCNode的子类。如果打开CCScene的实现文件,您将看到以下内容(假设我们讨论的是cocos2dv3): 您在上面看到的是场景的实现。它本质上是一个节点,其内容大小设置为设计大

添加新的cocos2d CCNode类时,CCScene的
子类
和CCNode的
子类
之间有什么区别?我在学习cocos2d教程时使用了CCScene,但在cocos2d+SpriteBuilder项目中,默认的MainScene类是node的子类,所以有人能给我解释一下吗?

很少。打开CCScene的头文件,您会看到它是CCNode的子类。如果打开CCScene的实现文件,您将看到以下内容(假设我们讨论的是cocos2dv3):

您在上面看到的是场景的实现。它本质上是一个节点,其内容大小设置为设计大小(如果未设置,则为视图大小),定位点为(0,0),标记为场景的标志(CCNode专用),其RGBA为黑色。CCNode不会假定这些内容(例如,节点的内容大小为0,0,而场景的内容大小为视图/设计)

节点是许多cocos2d类的基类。如您所见,场景只是一个节点,具有有意义的名称、设置的内容大小、视图大小(除非指定设计大小)和黑色。另一方面,精灵也是节点,但具有与精灵相关的其他属性


我并没有费心使用Sprite Builder,但根据您所写的内容,我会假设所有内容都添加到了CCNode,最终会添加到CCScene。由于没有CCLayer,我假设它只是使用一个CCNode作为默认层。其他人可以确认,因为我从来没有理由使用Sprite Builder,但听起来可能就是这样。

是的,CCB文件将CCNode作为根节点,但Sprite和particle CCB除外。有点遗憾的是,场景CCB还使用了一个CCNode,LoadAscene返回了一个通用的CCScene实例,其中CustomScene.CCB节点实例是其唯一的子节点。
@implementation CCScene

// -----------------------------------------------------------------

// Private method used by the CCNode.scene property.
-(BOOL)isScene {return YES;}

-(id)init
{
    if((self = [ super init ]))
    {
        CGSize s = [CCDirector sharedDirector].designSize;
        _anchorPoint = ccp(0.0f, 0.0f);
        [self setContentSize:s];

        self.colorRGBA = [CCColor blackColor];
    }

    return( self );
}

// -----------------------------------------------------------------

- (void)onEnter
{
    [super onEnter];

    // mark starting scene as dirty, to make sure responder manager is updated
    [[[CCDirector sharedDirector] responderManager] markAsDirty];
}

// -----------------------------------------------------------------

- (void)onEnterTransitionDidFinish
{
    [super onEnterTransitionDidFinish];

    // mark starting scene as dirty, to make sure responder manager is updated
    [[[CCDirector sharedDirector] responderManager] markAsDirty];
}

// -----------------------------------------------------------------

@end