Iphone 具有子属性和操作的CCNode

Iphone 具有子属性和操作的CCNode,iphone,cocos2d-iphone,Iphone,Cocos2d Iphone,我对cocos2d开发非常陌生,遇到了一个问题:获取有效的边界框和内容大小,并在CCNodes上与子节点一起运行CCActions。在我看来,如果您的CCNode有子节点,并且您在该CCNode上调用boundingBox(例如),您应该得到该CCNode的CGRect,该CCNode考虑了其子节点。还是我只是错误地组织了我的代码 无论如何,我已经为CCNode编写了一个小类别,它似乎返回了正确的boundingBox和contentSize,并对其子项运行操作 @implementation

我对cocos2d开发非常陌生,遇到了一个问题:获取有效的
边界框
内容大小
,并在
CCNode
s上与子节点一起运行
CCAction
s。在我看来,如果您的
CCNode
有子节点,并且您在该
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
@实现节点(子节点)
-(CGRect)边界框C{
if(self.boundingBox.size.width!=0 | | self.boundingBox.size.height!=0){
返回self.boundingBox;
}
CGRect holderRect=CGRectZero;
for(int i=0;i
我很想得到一些反馈。例如,我开始尝试使用名称
boundingBox
,而不是
boundingBoxC
,但我不相信这是一个好的做法(它涉及滑动)。或者,如果有更全面、更优雅的解决方案,我很想听听


谢谢

将节点视为参考点,而不是框,您可以看到为什么默认行为是这样的。您的代码看起来很干净(很高兴看到它在一个类别而不是子类中!),我看不出您的逻辑有任何问题。绝对不要覆盖内置方法(除非您真的需要),因为1)您可能会产生冲突,2)未来的开发人员会感到困惑。

与您的问题无关,在您的runActionC:,这不是内存泄漏吗?你在抄袭而没有releasing@XSlash,谢谢你的提醒。我已经修改了代码以包含
版本
。没问题-很高兴我能提供帮助:)