2011-03-25 67 views
1

我想在Cocos2d的屏幕上显示一个精灵。但是,我不想直接使用CCSprite。我有一个职业单位,将有一些额外的属性,我稍后将在我的游戏中需要。该股的类声明如下:CCSprite没有显示在iPhone上

@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); 
} 

现在我需要做的是将其应用到屏幕上。所以,我有另一个叫Playscene的类,它是我想要显示精灵和事物的场景。下面是init方法(这应该引起精灵的方法)看起来像Playscene:

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

    return self; 
} 

但是,当我运行此我得到一吨的错误数据,包括:“扔的一个实例后终止叫'NSException'“,可能更重要:” - PlayScene addChild:]中的断言失败。我不知道如何解决这个问题。任何帮助,将不胜感激。

回答

2

根据您的片段,很难知道哪里出了问题。那就是说我假设军队在你上次剪断的是单位。但是因为它在init()方法中,所以它可能是,因为它不是在army = [[Unit] alloc] initXXX]中创建的。

这就是说我不确定你想要在你的Unit类中继承CCSprite,因为你引用了CCSpirit,所以不需要继承它。

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

我的建议:

  1. 不要在单位(不需要据我可以看到)
  2. 没有一个方法延长CCSpirit - (无效)初始化但覆盖- (ID)初始
  3. 确保军队使用正确实例[单位的alloc]初始化](见上文点)
  4. 使用alloc你需要确保它是否被分配给一个保留属性,你也可以释放它来抵消alloc。

希望有所帮助。

+0

好的...我得到它的工作。只是为了让你知道:我没有展示完整的单元类,只有精灵部分。但是,我没有使用alloc,而且我重写了 - (id)init,而不是使用我的原始方法 - (void)init。再次感谢它现在的作品! – Dair 2011-03-25 23:40:12