【问题标题】:CCSprite is not displaying on the iPhoneCCSprite 未在 iPhone 上显示
【发布时间】:2011-03-26 07:33:10
【问题描述】:

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

@interface Unit : CCSprite {
    CCSprite *sprite;
}

-(void)init;

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

@end

我的初始化方法是这样的:

-(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:] 中的断言失败”。我不知道我该如何解决这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: iphone objective-c cocos2d-iphone


    【解决方案1】:

    根据您的 sn-ps,很难知道出了什么问题。也就是说,我假设您上次截图中的 army 属于 Unit 类型。但是因为它在 init() 方法内部,所以它可能是 nil 因为它不像 army = [[Unit] alloc] initXXX]; 那样在这里创建.

    也就是说,我不确定您希望在 Unit 类中对 CCSprite 进行子类化来完成什么,因为您正在引用 CCSpirit,因此不需要对其进行子类化。

    最后你的 Assertion 可能是因为你的 Army.spirit 要么是 NIL 要么它已经被添加并且 Coco2d 中的断言抛出异常(我假设最后一个 sn-p 来自 CCNode 的子类)。

    我的建议:

    1. 不要在单元中扩展 CCSpirit(据我所知不需要)
    2. 没有方法 - (void) init 但覆盖 - (id) init
    3. 确保使用 [[Unit alloc] init] 正确实例化 army(请参见上文)
    4. 使用 alloc 时,您需要确保如果将其分配给保留属性,您还需要释放它以抵消分配。

    希望对您有所帮助。

    【讨论】:

    • 好的...我让它工作了。只是让你知道:我并没有展示 Unit 的完整类,只展示了 sprite 部分。但是,我没有使用 alloc,我确实覆盖了 -(id)init,而不是使用我原来的 -(void)init 方法。再次感谢它现在可以使用了!
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 2021-06-01
    • 2013-11-07
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多