继承CCSprite初始化出现的问题

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"];

  }

}//这样生成精灵时调用此方法就会自动加载此图片,不会循环调用

posted @ 2012-08-14 10:57  hellocby  阅读(1080)  评论(0编辑  收藏  举报