Инициализировать сцену в cocos2d с параметром

#ios #objective-c #cocos2d-iphone

#iOS #objective-c #cocos2d-iphone

Вопрос:

Я пытаюсь инициализировать сцену в cocos2d (версия 0.99.5) и хочу передать параметр. В этом случае параметром является значение int, соответствующее номеру уровня. Сам класс scene является подклассом CCLayer , и я инициализирую его методом класса node:

 GameScene *scene = [GameScene node];  //GameScene subclass of CCLayer
  

У меня есть пользовательский метод инициализации, который принимает переменную «level» следующим образом:

 - (id) initWithGameLevel:(int)level {
    if ((self = [super init])){
        // etc 
    }
}
  

Просто интересно: не отклоняюсь ли я от базового подхода при создании собственного метода initWithX и как бы я инициализировал сцену целым числом уровня?

Комментарии:

1. Предложение Джима, если это подкласс CCLayer, то имя вашего класса должно быть GameLayer, поскольку GameScene выглядит как подкласс CCScene

Ответ №1:

Добавьте этот метод в свой подкласс

  (id)nodeWithGameLevel:(int)level{
    return  [[[self alloc] initWithGameLevel:level] autorelease];
}
  

и вместо

 GameScene *scene = [GameScene node]; 
  

записать

 GameScene *scene = [GameScene nodeWithGameLevel:levelNumber];
  

Комментарии:

1. Это прекрасная вещь. Я понимаю, что это что-то довольно простое в Objective-C. Все еще не уверен, что происходит, но этот ответ — хороший пример для подражания. Спасибо, Индер.

2. @JimMcGaw, Inder добавляет метод класса, используя ожидаемое соглашение Cocos2d «node», но по образцу назначенных инициализаторов по умолчанию. Для вашего следующего «хлебного крошки» … 😉