CCNode с дочерними свойствами и действиями - PullRequest
1 голос
/ 17 января 2012

Я довольно новичок в разработке cocos2d и столкнулся с проблемой получения действительных boundingBox и contentSize и запуска CCAction s на CCNode s с детьми.Мне показалось, что если у вашего CCNode есть дети, и вы звоните boundingBox (например) на этот CCNode, вы должны получить CGRect того CCNode, который учитывает его детей.Или я просто неправильно организую свой код ..?

В любом случае, я написал небольшую категорию для CCNode, которая, похоже, возвращает правильные boundingBox и contentSize и выполняет действияна его детей.

@implementation CCNode(Children)

- (CGRect)boundingBoxC {
    if (self.boundingBox.size.width != 0 || self.boundingBox.size.height != 0) {
        return self.boundingBox;
    }

    CGRect holderRect = CGRectZero;

    for (int i = 0; i < self.children.count; i++) {
        CCNode *node = [self.children objectAtIndex:i];
        holderRect = CGRectUnion(holderRect, node.boundingBoxC);
    }

    return holderRect;
}

- (CGSize)contentSizeC {
    return self.boundingBoxC.size;
}

- (void)runActionC:(CCAction *)action {
    [self runAction:action];

    for (int i = 0; i < self.children.count; i++) {
        id action2 = [action copy];
        CCNode *node = [self.children objectAtIndex:i];
        [node runActionC:action2];
        [actions2 release];
    }
}

@end

Я хотел бы получить некоторую обратную связь по этому вопросу.Например, я начал с того, что пытался использовать имя boundingBox вместо boundingBoxC, но не был уверен, что это хорошая практика (она включала в себя мошенничество).Или, если есть более полное и элегантное решение, я бы хотел услышать об этом.

Спасибо!

1 Ответ

0 голосов
/ 17 января 2012

Думайте об узлах как о контрольных точках, а не о блоках, и вы можете понять, почему поведение по умолчанию такое, как есть.Ваш код выглядит чистым (и рад видеть, что он в категории, а не в подклассе!), И я не вижу никаких проблем с вашей логикой.Определенно не переопределяйте встроенные методы (если только вам это не нужно), так как 1) вы можете создавать конфликты и 2) будущие разработчики будут сбиты с толку.

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