0

トグルスイッチを作成しています。ToggleNodeを含むCCLayerを含むCCSceneがあります。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の子ノードを計算した後で移動する必要がある場合もあります。これにより、ToggleNodeの子ノードcontentSizeが境界ボックスの「外側」に表示されなくなります。

于 2012-07-12T09:37:56.930 に答える