0

我有一个 b2Bodies 数组,要通过我的更新循环在安全点上删除,但有时我需要删除对象而不将它们添加到这个数组中。在我这样做之前,我想检查主体是否已经在数组中,如果它被删除,那么对象不会被删除两次(导致异常)。我知道如果主体是客观的 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 回答