zoukankan      html  css  js  c++  java
  • 继承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"];

      }

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

  • 相关阅读:
    山屋惊魂 · 大模拟 · 码长破千 · 祭
    CSP-S 模拟92
    CSP-S 模拟91
    关于我
    CSP-S 模拟76
    [2020 年联考 A 卷] HEOI 2020 退役记
    csp-s 2019 退役记
    论人贵有自知之明的重要性
    [NOI2018] 你的名字
    HDU 3446 daizhenyang's chess
  • 原文地址:https://www.cnblogs.com/hellocby/p/2637652.html
Copyright © 2011-2022 走看看