Доступ к свойствам объекта spritebuilder за пределами его класса в Xcode?

Я очень запутался в том, как Spritebuilder связывается с Xcode.

В настоящее время я использую CCBloader для «инициализации» (?) моих пользовательских классов, которые я создал в Spritebuilder, но я не могу получить доступ к свойствам, которые я определил.

В моем spritebuilder у меня есть CCNode с именем ContentPane, в котором есть вложенные CCNode с именами _rockPath1 и _rockPath2, оба из которых содержат файл .png, который выглядит как камни.

_rockPath1 и _rockPath2 являются переменными-владельцами.

Вот как выглядит ContentPane: Заголовочный файл:

@interface ContentPane : CCNode

@property (nonatomic, assign) CCNode * _rockPath1;
@property (nonatomic, assign) CCNode * _rockPath2;

@end

.m-файл:

@implementation ContentPane{
}
- (id)init {
    self = [super init];
    if (self) {
        CCLOG(@"ContentPane created");
    }
    return self;
}
@end

И здесь я инициализирую contentPane внутри файла с именем Gameplay.m:

- (void)didLoadFromCCB {

    CCNode* pane = [CCBReader load: @"ContentPane"];
    [self addChild:pane];

    //HERE I TRY TO ACCESS THE PROPERTY _ROCKPATH1
    pane._rockPath1.position = ccp(50,50);

}

Выдает ошибку "Свойство _rockPath1 не найдено в объекте типа CCNode"


person Aeisys    schedule 18.08.2014    source источник


Ответы (1)


Это связано с тем, что, насколько известно компилятору, pane — это всего лишь объект CCNode, а CCNode не имеет свойства _rockPath1.

Вам нужно явно объявить pane как ожидаемый тип, которым в данном случае является ContentPane, а затем привести объект, возвращаемый +[CCBReader load:], к этому типу:

- (void)didLoadFromCCB 
{
    ContentPane *pane = (ContentPane *)[CCBReader load: @"ContentPane"];
    [self addChild:pane];

    pane._rockPath1.position = ccp(50,50);
}
person Tyler    schedule 18.08.2014
comment
Спасибо, это решило это, ха-ха. Однако CCBReader возвращает объект CCNode, поэтому выдает мне предупреждение. Могу ли я что-нибудь с этим поделать? - person Aeisys; 18.08.2014
comment
Вы включили часть (ContentPane *) сразу после знака равенства? Это должно отключить это предупреждение, потому что вы переводите его из CCNode в ContentPane. - person Tyler; 18.08.2014