Я довольно новичок в разработке 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
, но не был уверен, что это хорошая практика (она включала в себя мошенничество).Или, если есть более полное и элегантное решение, я бы хотел услышать об этом.
Спасибо!