2012-07-20 129 views
-1

现在我有这样的:For循环“我”逻辑

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)]; < ---看起来就像那样。

+1

你的问题还不太清楚......你想用变量做什么?请尽量用更充分和适当的英语来解释你的问题,因为它站得住脚,几乎完全不可理解。 – 2012-07-20 19:39:18

回答

3

您可以尝试使用inner for-loop与另一个循环变量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"); 
     } 
} 
+0

这工作得很好!非常感谢。它在FPS下降,但我猜如果我拿出不会发生的NSLog。 – stenger96 2012-07-20 19:51:37

+0

如果性能下降并且您的级别大小比tile大小大(因此循环迭代次数变得非常大),您可能应该考虑优化循环(例如,如果您只需要检测一个交叉点就可以从中断开,或者缩小范围i和j的可能值)。当你使用cocos2d时,可能你可以使用像box2d这样的物理引擎提供的碰撞检测功能吗? – Vladimir 2012-07-20 20:19:20

+0

不,只是它会在每次两个交叉点相交时记录下来,几乎每秒钟只有一个街区5-9次......取出后现在回到60。 – stenger96 2012-07-20 22:52:30

1

单独使用for循环。

A for循环遍历某个范围的值。如果你想遍历两个单独的范围,使用两个for循环是一个好主意,因为它清楚地传达了你正在做的事情。如果循环的主体不止一行或两行,你可能想把它分解成它自己的函数或方法,或者甚至使用你在循环之前定义的块。这样,你可以确定两个循环执行完全相同的任务,它只是值不同的范围。

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

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

+0

但是,如何访问不同循环的变量? – stenger96 2012-07-20 19:43:47

+0

@ stenger96对不起,我理解你的意思是你想循环遍历两个范围,而不是在一起。 Vladimir建议嵌套'for'循环是正确的方法来搜索两个范围。 – Caleb 2012-07-20 19:59:33