0

更新ループによって安全な時点で削除される b2Bodies の配列がありますが、オブジェクトをこの配列に追加せずに削除する必要がある場合があります。これを行う前に、本体が既に配列にあるかどうかを確認し、それが削除されている場合は、オブジェクトが 2 回削除されないようにします (例外が発生します)。体が目的のcオブジェクトであれば、これは簡単だと思います。

オブジェクトは次のように配列に追加されます。

[bodiesToBeDestroyedMutableArray addObject:[NSValue valueWithPointer:body]];

オブジェクトをbodiesToBeDestroyedMutableArray特定の b2Body ポインターと比較して、それらが同じ本体 (指している) かどうかを確認できますか? 私はもう試した:

if ([bodiesToBeDestroyedMutableArray containsObject:[NSValue valueWithPointer:body]])

for(NSValue *bodyValue in bodiesToBeDestroyedMutableArray) {
    b2Body *bodyToTest = (b2Body*)[bodyValue pointerValue];

    if(bodyToTest == body){
        NSLog(@"body found in bodies to be destroyed");
    }
}
4

1 に答える 1

0

あなたが言及した同等性テストが正しく機能するかどうかを確認していません...

body->SetUserData を使用して、何らかの識別子 (タグ) を設定し、後でタグ間の同等性を確認できるようにすることができます。

既にユーザーデータとして本体に何か他のものを設定している場合 (mi の場合のように) に備えて、この「タグ」をユーザーデータとして持っているものに設定することで、同じアプローチが有効になります。

例えば:

// Get the user data
XXSomeClass *block = (__bridge XXSomeclass*)b->GetUserData();

// Retrieve body from array
// Might need to cast the returning item from the array with (XXTypeAtArray *)
XXTypeAtArray *item = [arrayOfBlocks objectAtIndex:block.tag];
于 2013-10-26T12:09:34.150 に答える