首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有子级属性和操作的CCNode

具有子级属性和操作的CCNode
EN

Stack Overflow用户
提问于 2012-01-17 06:07:14
回答 1查看 510关注 0票数 1

我是cocos2d开发的新手,在获取有效的boundingBoxcontentSize以及在带有孩子的CCNode上运行CCActions时遇到了问题。在我看来,如果您的CCNode有孩子,并且您在该CCNode上调用boundingBox (例如),那么您应该获得该CCNode的一个考虑其孩子的CGRect。或者是我只是错误地组织了我的代码?

无论如何,我已经为CCNode编写了一个小类别,它似乎返回正确的boundingBoxcontentSize,并对其子对象运行操作。

代码语言:javascript
复制
@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,但我不确定这是不是一个好的做法(它涉及到swizzling)。或者,如果有更全面、更优雅的解决方案,我很想听听。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-17 06:19:21

把节点想象成参考点,而不是盒子,你就会明白为什么默认行为是这样的。您的代码看起来很干净(很高兴看到它属于一个类别,而不是一个子类!)我看不出你的逻辑有什么问题。绝对不要覆盖内置的方法(除非你真的需要),因为1)你可能会造成冲突,2)未来的开发人员会感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8886960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档