我在objective-c中的嵌套for循环中使用局部变量观察到一些奇怪的行为。
下面的代码循环遍历一个名为visitor的NSMutableArray,其大小范围从1到20。
我将对象的本地副本存储在位置i,然后我计算出它的边界框。
然后我在第一个循环中再次遍历数组,从列表中挑出第二个对象并计算它的边界框。
当屏幕上的物体重叠时,几乎从未达到碰撞检查。
当我使用调试器逐步执行代码时,我在第二个for循环中观察到,一旦变量visitor2被设置,它就永远不会从该点开始变化。它继续指向同一个对象,直到函数调用完成。
访问者数组中的所有对象肯定是完全唯一的对象,因为同一个对象没有添加到数组中两次我确保检查这个。
我不知道是什么导致这种情况,我从来没有见过这样的东西。任何帮助将不胜感激。
这是我的代码:
for (int i = 0; i < [visitors count]; i++)
{
// Obtain visitor from the list
Visitor* visitor1 = [visitors objectAtIndex: i];
// Calculate it's bounding box
CGRect visitor1rect = CGRectMake(visitor1.position.x - visitor1.size.x/2,
visitor1.position.y - visitor1.size.y/2,
visitor1.size.x, visitor1.size.y);
// Loop through all other visitors
for (int j = 0; j < [visitors count]; j++)
{
// Don't check for a collision with self
if (i != j)
{
// Obtain a visitor from the list
Visitor* visitor2 = [visitors objectAtIndex: j];
// Calculate it's bounding box
CGRect visitor2rect = CGRectMake(visitor2.position.x - visitor2.size.x/2,
visitor2.position.y - visitor2.size.y/2,
visitor2.size.x, visitor2.size.y);
// Chcek of the two bounding boxes intersect
if ( CGRectContainsRect(visitor1rect, visitor2rect) ) {
// Do stuff
}
}
}
}
答案 0 :(得分:1)
使用CGRectIntersectsRect
进行交叉点测试而不是“包含”,这意味着不同的东西。如果这可以解决您的问题,我猜测调试器只是向您说谎visitor2
指向的东西 - 代码看起来很好。