如何获得一个Node的BoundingBox

2025-05-05 09:20:22
推荐回答(1个)
回答1:

自己写了2个函数,递归获取Node的BoundingBox和ContentSize,用着貌似没什么Bug。。。 onlyTexture参数的意思是只统计贴图占用的空间

Rect getBoundingBoxRecursive(Node *node, bool onlyTexture = true) {
CCAssert(node != nullptr, "node can't be null");

Rect nodeRect = node->getBoundingBox();
nodeRect.origin = node->convertToWorldSpace(Vec2::ZERO);

for_each(node->getChildren().begin(), node->getChildren().end(), [&](Node* subNode) {
Rect subNodeRect;
subNodeRect = getBoundingBoxRecursive(subNode);
if (onlyTexture && nodeRect.size.equals(Size::ZERO)) {
nodeRect.origin = subNodeRect.origin;
}
nodeRect.merge(subNodeRect);
});
return nodeRect;
}

Vec2 getContentSizeRecursive(Node *node, bool onlyTexture = true) {
return getBoundingBoxRecursive(node, onlyTexture).size;
}