5

この方法で問題が発生しました。明らかに互いに含まれている2つの長方形があります(確認のために手動で座標をグラフ化しています)。CGRectContainsRectを使用してこれら2つの長方形を比較すると、falseが返されます。私の人生の間、私はすべてを試し、ネットを精査しました、そして私はこの問題に対する答えを見つけることができません。誰もが理由を知っていますか?CGRectsの値をデバッグ時に含めて、それらが確実に相互に存在することを示しました。

-(bool)checkBoundingBox {
    bool returnItem = YES;

    //Checks for sprite interaction
    for (int i = 0; i < [arrGameItems count]; i++) {
        CGRect rect2 = [[self getChildByTag:1] boundingBox];
        CGRect rect1 = [[self getChildByTag:3] boundingBox];

        //        rect1 = CGRectStandardize(rect1);
        //        rect2 = CGRectStandardize(rect2);

        if (CGRectContainsRect(rect2, rect1)) {
            CCLOG(@"removed child b*&ch");
            [self removeChildByTag:[arrGameItems count] cleanup:YES];
            returnItem = NO;
        }
    }   

    CCLOG(@"g-dammit");    
    return returnItem;
}

rect1原点x=141 y = 76、高さ= 25、幅= 25

rect2原点x=127 y = 91、高さ= 25、幅= 25

4

2 に答える 2

24

CGRectContainsRect()交差するかどうかだけでなく、ある長方形が別の長方形を完全に取り囲んでいるかどうかをチェックします。座標から、長方形は互いに含まれていませんが、交差しています。を探していCGRectIntersectsRect()ます。

于 2012-01-24T04:20:39.210 に答える
0

あなたの例では、rect1にはrect2が含まれていません。

Rect 1 x 座標の範囲は 141 から 166 です。Rect 2 x 座標の範囲は 127 から 152 です。

したがって、rect2 は rect1 内に含まれません (rect2 は x 座標 127 ~ 140 内に存在し、rect1 はそれらの座標内に存在しないため)。

于 2012-01-24T04:22:36.433 に答える