0

我正在阅读一本 cocos2D 书籍,并且正在尝试初始化 Radar Dish 对象。动画是在 initAnimations 方法中设置的(在 init 方法中调用),但是从不调用 init 方法。在 GameLayer.m 中,他们使用 createObjectOfType 方法,该方法调用:

RadarDish *radarDish = [[RadarDish alloc] initWithSpriteFrameName:@"radar_1.png"];

所以initWithSpriteFrameName 是RadarDish 的超类的一个init,它设置了Radar Dish。那么 RadarDish.m 的 init 什么时候会被调用?它导致我的程序崩溃,因为动画从未在 init 中设置。

4

1 回答 1

3

您需要initWithSpriteFrameName:在任何子类中覆盖,包括RadarDish,它需要自己的初始化步骤。在该方法中,您需要调用超类的指定初始化程序,然后继续满足子类的特定需求,如下所示:

- (id)initWithSpritFrameName: (NSString *)frameName
{
    self = [super initWithSpriteFrameName:frameName];
    if( !self ) return nil;

    [self initAnimations];    // As long as initAnimations doesn't also call a
                              // superclass's initializer!
    // Other setup...

    return self;
}

现在[[RadarDish alloc] initWithSpriteFrameName:...]将使用此实现,确保为您的对象设置动画。

initAnimations您还应该更改init. 调用它setUpAnimations或类似的东西。

于 2013-02-06T19:48:57.423 回答