Cocos2d边界框保持为零

时间:2012-07-12 09:24:40

标签: ios cocos2d-iphone bounding-box

我正在创建一个切换开关。我有一个包含CCLayer的CCScene,其中包含一个ToggleNode。 ToggleNode正确显示我输入的精灵和标签。触摸处理不起作用,因为ToggleNode的边界框似乎保持为零。我在CCLayer(它的作用是ccTouchBegan:withEvent:正在输入)中找到了触摸,并且我有这个代码:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

    NSLog(@"bounding box: %f, %f, %f, %f", toggleNode.boundingBox.origin.x, toggleNode.boundingBox.origin.y, toggleNode.boundingBox.origin.x + toggleNode.boundingBox.size.width, toggleNode.boundingBox.origin.y + toggleNode.boundingBox.size.height);
    NSLog(@"touch: %f, %f", touchLocation.x, touchLocation.y);

    if (CGRectContainsPoint(toggleNode.boundingBox, touchLocation)) {
        [toggleNode toggle];
    }

    return NO;
}

触摸ToggleNode会导致:

bounding box: 512.000000, 384.000000, 512.000000, 384.000000
touch: 508.000000, 378.000000

这让我相信边界框保持为零。但为什么?保留问题?我仍然在cocos2d学习,但我不认为这是正常行为。

2 个答案:

答案 0 :(得分:7)

如果ToggleNode是从CCNode派生的,则此行为是正常的。 CCNode具有0大小的边界框,而contentSize属性也为零。

如果您从CCNode派生您的类,则由您将contentSize属性(这也会更新边界框)设置为它应具有的任何大小。

只有使用使用纹理的类(CCSprite,CCLabelTTF等),cocos2d才会自行设置contentSize。

答案 1 :(得分:1)

你必须自己计算你的ToggleNode contentSize。您可能还需要在计算其contentSize后移动ToggleNode的子节点,因此它们不会出现在其边界框的“外部”。