我发现在cocos2d Best Practices中有一个建议使用initWithTexture来初始化sprite子类,而在几本书和教程中我发现你也可以使用initWithSpriteFrameName。那是为什么?
答案 0 :(得分:4)
CCSprite
中的所有初始化方法都使用initWithTexture:rect
来创建精灵。例如,
-(id) initWithFile:(NSString*)filename
{
NSAssert(filename!=nil, @"Invalid filename for sprite");
CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage: filename];
if( texture ) {
CGRect rect = CGRectZero;
rect.size = texture.contentSize;
return [self initWithTexture:texture rect:rect];
}
[self release];
return nil;
}
其他功能(initWithFile
,initWithSpriteFrame
,initWithSpriteFrameName
等等也直接或间接调用initWithTexture:rect
。如果你的CCSprite
子类有任何特殊的初始化需要发生(因为它表面上会,因为你是另一个类的子类),在initWithTexture:rect
中执行它可以保证它将被运行。