Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone 3具尸体同时相撞时无法进入EXC__Cocos2d Iphone - Fatal编程技术网

Cocos2d iphone 3具尸体同时相撞时无法进入EXC_

Cocos2d iphone 3具尸体同时相撞时无法进入EXC_,cocos2d-iphone,Cocos2d Iphone,我有3个box2d身体。它们都有用户数据。他们的userData标签如下所示 BODY 1: Tag = 1 BODY 2: Tag = 1 BODY 3: Tag = 2 在我的代码中,我还实现了contact listener来检测身体之间的接触,并设置了身体3将被销毁的条件,即身体1和身体3之间的碰撞或身体2和身体3之间的碰撞 但是,当BODY1和BODY2同时与BODY3碰撞时,我的访问权限变差了。我知道为什么会出现这个错误:这是因为没有身体可以移除,因为它是在第一次接触时移除的 有人

我有3个box2d身体。它们都有用户数据。他们的userData标签如下所示

BODY 1: Tag = 1
BODY 2: Tag = 1
BODY 3: Tag = 2
在我的代码中,我还实现了contact listener来检测身体之间的接触,并设置了身体3将被销毁的条件,即身体1和身体3之间的碰撞或身体2和身体3之间的碰撞

但是,当BODY1和BODY2同时与BODY3碰撞时,我的访问权限变差了。我知道为什么会出现这个错误:这是因为没有身体可以移除,因为它是在第一次接触时移除的


有人知道我如何解决这个错误吗?

你可以设置一个条件来检查你的碰撞体是否为==NULL

如果不是,就把它毁了。如果是,那就是它已经被摧毁了

编辑:

要保留特定的标记系统,您可以将NSDictionary作为每个主体的用户数据传递:

bodyDef.userData = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithInt:theBodyTag], @"tag",
                             [NSNumber numberWithInt:theUniqueID], @"ID", 
                             nil];
然后,当发生碰撞时,你可以查看Bodys用户数据,知道你是否在Body3面前

if ([(id)body1->GetUserData() objectForKey:@"ID"] == 3) {
        if ([(id)body2->GetUserData() objectForKey:@"ID"] == 1 || 
            [(id)body2->GetUserData() objectForKey:@"ID"] == 2) {
                Feed an array with the body to destroy and destroy it after your collision checks !
                [myQueue addObject:[(id)body2->GetUserData() objectForKey:@"ID"]];
        }
}
在碰撞例程之后,迭代所有实体,并销毁将队列对象作为唯一ID的实体


请注意,我没有检查这段代码的实际工作情况,但这是我的想法

我已经提出了这个条件,但它也给了EXC_BAD_ACCESS error我们可以检查这个身体是否存在于世界上吗?你可以在遍历你所有的身体时,检查是否有一个身体有这个用户数据。是的,我也在这样做。你的身体中有两个似乎没有相同的用户数据(“1”),这可能是个问题。