Я наблюдаю странное поведение с локальной переменной внутри вложенного цикла for в target-c.
Приведенный ниже код перебирает 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
}
}
}
}