0

我正在创建一个拨动开关。我有一个 CCScene,其中包含一个包含 ToggleNode 的 CCLayer。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 中学习,但我认为这不是正常行为。

4

2 回答 2

7

如果 ToggleNode 是从 CCNode 派生的,这种行为是正常的。CCNode 的边界框大小为 0,contentSize 属性也为零。

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

仅当您使用使用纹理的类(CCSprite、CCLabelTTF 等)时,cocos2d 才会自行设置 contentSize。

于 2012-07-12T09:38:19.697 回答
1

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

于 2012-07-12T09:37:56.930 回答