我在objective-c的嵌套for循环中观察到局部变量的一些奇怪行为。
下面的代码循环通过一个称为访问者的 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
}
}
}
}