我是cocos2d开发的新手,在获取有效的boundingBox和contentSize以及在带有孩子的CCNode上运行CCActions时遇到了问题。在我看来,如果您的CCNode有孩子,并且您在该CCNode上调用boundingBox (例如),那么您应该获得该CCNode的一个考虑其孩子的CGRect。或者是我只是错误地组织了我的代码?
无论如何,我已经为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,但我不确定这是不是一个好的做法(它涉及到swizzling)。或者,如果有更全面、更优雅的解决方案,我很想听听。
谢谢!
发布于 2012-01-17 06:19:21
把节点想象成参考点,而不是盒子,你就会明白为什么默认行为是这样的。您的代码看起来很干净(很高兴看到它属于一个类别,而不是一个子类!)我看不出你的逻辑有什么问题。绝对不要覆盖内置的方法(除非你真的需要),因为1)你可能会造成冲突,2)未来的开发人员会感到困惑。
https://stackoverflow.com/questions/8886960
复制相似问题