如何检查可变阵列中是否存在b2Body?

时间:2012-11-13 17:30:13

标签: objective-c pointers cocos2d-iphone box2d

我有一个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");
    }
}

1 个答案:

答案 0 :(得分:0)

没有检查你提到的相等测试是否正常工作......

您可以使用body-> SetUserData设置某种标识符(标记),以便稍后检查标记之间的公平性。

万一你已经将其他东西设置为bodydata(就像在mi情况下一样),通过将此“tag”设置为userdata所具有的任何内容,同样的方法也是有效的。

例如:

// 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];