CCSprite的各种initWithXXX方法中都会调用init方法:
-(id) initWithXXX {
self = [self init];
}
所以在你的ccsprite子类的init方法中不要调用除[super init]之外的任何initWithXXX方法,否则就会出现递归的执行init的问题。
错误代码:
-(id) init
{
self = [super init];
if (self)
{
[self initWithFile:@"BlueFish.png"]; //因为此处调用了CCsprite中的initWithFile:方法会重复递归调用init,生成死循环
}
return (self);
}
正确代码:
@implementation OrbSprite
-(id) init
{
if( (self=[super init]) )
{
//此处可处理一些成员变量,但不要调用任何initWithXXX;
}
return self;
}
@end
一般情况下,想生成自己的精灵时就加载完图片时可以自己其一个方法名字,不覆盖CCSprite的原方法,如:
- (id) initMyOwnSprite
{
self = [super init];
if(self)
{
self = [super initWithFile:"myImage.png"];
}
}//这样生成精灵时调用此方法就会自动加载此图片,不会循环调用