#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», но по образцу назначенных инициализаторов по умолчанию. Для вашего следующего «хлебного крошки» … 😉