对于循环'i'逻辑

时间:2012-07-20 19:36:43

标签: objective-c for-loop cocos2d-iphone

现在我有这个:

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值中的所有图块。所以tile = [levelLayer tileAt:ccp(i,j)];&lt; ---看起来就像那样。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用内部for循环与另一个循环变量j迭代所有可能的值。类似的东西:

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");
        }
}

答案 1 :(得分:1)

使用单独的for循环。

for循环遍历某些值范围。如果你想迭代两个不同的范围,使用两个for循环是一个好主意,因为它清楚地传达了你正在做的事情。如果循环的主体超过一行或两行,您可能希望将其分解为自己的函数或方法,或者甚至使用在循环之前定义的块。这样,您可以确保两个循环执行完全相同的任务,并且它只是不同的值范围。

还有其他可能的解决方案来处理多个指数范围。例如,您可以将两个范围添加到NSMutableIndexSet,然后使用-enumerateIndexesUsingBlock:迭代所有索引。

但严重的是,只需使用两个for循环。