CCSprite не отображается на iPhone - PullRequest
1 голос
/ 26 марта 2011

Я пытаюсь сделать отображение спрайта на экране в Cocos2d.Но я не хочу использовать CCSprite напрямую.У меня есть класс Unit, который будет иметь некоторые дополнительные свойства, которые мне понадобятся позже в моей игре.Объявление класса Unit выглядит следующим образом:

@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:]».Я не знаю, как я могу решить это.Любая помощь будет оценена.

1 Ответ

2 голосов
/ 26 марта 2011

На основе ваших фрагментов очень трудно понять, что идет не так.Тем не менее, я предполагаю, что армия в вашем последнем выстреле имеет тип Юнит .Но поскольку это внутри метода init (), это может быть nil , потому что он здесь не создается, как в army = [[Unit] alloc] initXXX]; .

Тем не менее, я не уверен, что вы хотите достичь с помощью подкласса CCSprite в вашем классе Unit, потому что вы ссылаетесь на CCSpirit и, следовательно, нет необходимости создавать его подкласс.ваш Army.spirit либо NIL, либо он уже добавлен, и утверждение внутри Coco2d выдает исключение (я предполагаю, что последний фрагмент взят из подкласса CCNode).

Мои предложения:

  1. Не расширять CCSpirit в Юните (насколько я вижу, не нужно)
  2. Нет метода - (void) init , но перезаписать -(id) init
  3. Убедитесь, что Army правильно создан с использованием [[Unit alloc] init] (см. пункт выше)
  4. Используя alloc, вы должны убедиться, что если он назначен сохраняющемуВо-первых, вы также отпускаете его, чтобы сместить выделение.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...