Objective-cのネストされたforループ内のローカル変数で奇妙な動作を観察しています。
以下のコードは、1〜20のサイズのビジターと呼ばれるNSMutableArrayをループします。
オブジェクトのローカルコピーを位置iに保存してから、そのバウンディングボックスを作成します。
次に、最初のループ内で配列を再度ループし、リストから2番目のオブジェクトを選択して、その境界ボックスを調べます。
画面上のオブジェクトが重なっている場合、衝突チェックに到達することはほとんどありません。
デバッガーを使用してコードをステップ実行すると、2番目のforループ内で、変数visitor2が設定されると、それ以降は変更されないことがわかります。関数呼び出しが完了するまで、同じオブジェクトをポイントし続けます。
訪問者配列内のすべてのオブジェクトは、同じオブジェクトが2回配列に追加されないため、完全に一意のオブジェクトです。これを確認しました。
私はこれを引き起こしている可能性があるものがわかりません、私はそれのようなものを見たことがありません。どんな助けでも大歓迎です。
これが私のコードです:
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
}
}
}
}