-1

今私はこれを持っています:

for (int i = 0; i < level.contentSize.width/level.tileSize.width; i ++){
    tile = [levelLayer tileAt:ccp(i,17)];
    if (CGRectIntersectsRect(ball.boundingBox, tile.boundingBox)) {
        NSLog(@"hit");
    }
}

iすべてのx値とy値のすべてのタイルをチェックできるように、必要なのは2つの変数(現在は1つです)です。したがって、tile = [levelLayer tileAt:ccp(i,j)];<---はそのようになります。

4

2 に答える 2

3

すべての可能な値を反復処理する別のループ変数 j を使用して、内側の for ループを使用してみることができます。何かのようなもの:

for (int i = 0; i < level.contentSize.width/level.tileSize.width; i ++)
    for (int j = 0; j < level.contentSize.height/level.tileSize.height; j ++){

        tile = [levelLayer tileAt:ccp(i,j)];
        if (CGRectIntersectsRect(ball.boundingBox, tile.boundingBox)) {
            NSLog(@"hit");
        }
}
于 2012-07-20T19:41:12.397 に答える
1

別々のforループを使用してください。

ループは、ある範囲のfor値を繰り返します。2 つの別々の範囲を反復処理する場合は、2 つの for ループを使用することをお勧めします。これにより、何を行っているかが明確に伝わるからです。ループの本体が 1 行または 2 行を超える場合は、それを独自の関数またはメソッドに分割するか、ループの直前に定義したブロックを使用することもできます。そうすれば、両方のループがまったく同じタスクを実行し、異なるのは値の範囲だけであることを確認できます。

いくつかの範囲のインデックスを処理するための解決策は他にもあります。たとえば、両方の範囲を NSMutableIndexSet に追加し、 を使用してすべてのインデックスを反復処理できます-enumerateIndexesUsingBlock:

しかし、真剣に、2 つのforループを使用するだけです。

于 2012-07-20T19:39:38.057 に答える