CCSprite未显示在iPhone上

CCSprite未显示在iPhone上,iphone,objective-c,cocos2d-iphone,Iphone,Objective C,Cocos2d Iphone,我正在尝试在Cocos2d的屏幕上显示精灵。但是,我不想直接使用CCSprite。我有一个类单位,它将有一些我以后在游戏中需要的额外属性。单元的类别声明如下: @interface Unit : CCSprite { CCSprite *sprite; } -(void)init; @property(nonatomic, retain) NSNumber *type; @property(nonatomic, retain) CCSprite *sprite; @end 我的i

我正在尝试在Cocos2d的屏幕上显示精灵。但是,我不想直接使用CCSprite。我有一个类单位,它将有一些我以后在游戏中需要的额外属性。单元的类别声明如下:

@interface Unit : CCSprite {
    CCSprite *sprite;
}

-(void)init;

@property(nonatomic, retain) NSNumber *type;
@property(nonatomic, retain) CCSprite *sprite;

@end
我的init方法如下所示:

-(void)init {
    self.sprite = [CCSprite spriteWithFile:@"BasicUnit.png"];
    self.sprite.position = ccp(50, 100);
}
现在我需要做的是把它应用到屏幕上。所以,我有另一个叫做PlaySecene的类,它是我想要显示精灵和其他东西的场景。以下是PlaySecene中的init方法(应该绘制精灵的方法)的外观:

-(id) init {
    if( (self=[super init] )) {
        self.isTouchEnabled = YES;
        [army init];
        [self addChild:army.sprite];
    }

    return self;
}

但是,当我运行它时,我会得到大量错误数据,包括:“在抛出“NSException”实例后调用terminate”,可能更重要的是:“在-[PlaySecene addChild:]中断言失败”。我不知道怎么才能解决这个问题。任何帮助都将不胜感激。

根据您的片段,很难知道哪里出了问题。也就是说,我假设你最后一次截击的陆军属于部队类型。但是因为它在init()方法中,所以它可能是nil,因为它不是像在army=[[Unit]alloc]initXXX]中那样在这里创建的

也就是说,我不确定在单元类中子类化CCSprite想要实现什么,因为您引用的是CCSprite,所以不需要子类化它

最后,您的断言可能是因为您的army.spirit为NIL或者它已经被添加,并且Coco2d中的断言抛出异常(我假设最后一个片段来自CCNode的子类)

我的建议是:

  • 不要在单元中扩展CCSpirit(据我所知,不需要)
  • 没有方法-(void)init但覆盖-(id)init
  • 确保使用[[Unit alloc]init]正确实例化陆军(见上文)
  • 使用alloc时,您需要确保如果将其指定给保留特性,您也会释放它以偏移alloc

  • 希望有帮助。

    好的。。。我让它工作了。我只是想让你知道:我没有展示完整的单元类,只是展示了精灵部分。但是,我没有使用alloc,我确实重写了-(id)init,而不是使用我原来的-(void)init方法。再次感谢,它现在可以工作了!