0

Я вытягивал свои волосы из-за этого, я не могу понять, что это простая проблема.Objective-C: Мои значения инициализации не установлены

У меня есть класс, который расширяет CCNode, вот заголовок:

#import "CCNode.h" 

@interface ContentPane : CCNode 

@property (nonatomic, strong) CCNode * _rockPath1; 
@property (nonatomic, strong) CCNode * _rockPath2; 
@property (nonatomic, strong) CCNode *_secondPath1; 
@property (nonatomic, strong) CCNode *_secondPath2; 

@property (nonatomic) int map; 

-(void)generatePane; 

@end 

Я пытаюсь инициализировать этот класс так, чтобы видимость _rockPath1, _rockPath2 и т.д. скрыта. Однако значения, установленные в init, не соблюдаются. Вот мой init, в моем init я просто пытаюсь установить положение ._rockPath1, потому что я знаю, что эта строка кода работает, потому что у меня есть ее в другом месте в моей программе, и она отлично работает.

- (id)init { 
    self = [super init]; 
    self.map = 0x11111111; 
    CCLOG(@"WHAT"); 
    //_rockPath1.position = ccp(90,90); 
    self._rockPath1.position = ccp(90,90); 
    return self; 
} 

После моего класса инициализируются, _rockPath1 не имеет места я поставил для нее, она по-прежнему имеет значение, определенное в SpriteBuilder. Как ни странно, карта установлена ​​на правильные значения, но позиция не соответствует.

+0

Я думаю, что вы не должны расширять этот класс с помощью ccnode, если вы создаете экземпляры внутри этого ContentPane. А также во время init вам нужно выделить память _ rockpath1 перед назначением ей позиции. – bllakjakk

ответ

1

Видя, что вы используете SpriteBuilder, и если вы сделать присвоения _rockPath и т.д. из SpriteBuilder (док корень вара), вы должны сделать инициализацию значений по умолчанию в didLoadFromCCB (и удалить метод инициализации):

-(void) didLoadFromCCB 
{ 
    self.map = 0x11111111; 
    _rockPath1.position = ccp(90,90); 
} 

Дело в том, что метод init запускает экземпляр, созданный узлом, что означает, что он работает до того, как будут применены назначения из CCBReader.