Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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
Ios Box2D碰撞检测?_Ios_Cocos2d Iphone_Box2d - Fatal编程技术网

Ios Box2D碰撞检测?

Ios Box2D碰撞检测?,ios,cocos2d-iphone,box2d,Ios,Cocos2d Iphone,Box2d,我正在将b2BodyDef添加到我的场景中,如下所示: b2BodyDef platformBodyDef; platformBodyDef.type = b2_dynamicBody; platformBodyDef.position.Set(40, 495); platformBodyDef.userData = platforms; _body = _world->CreateBody(&platformBodyDef); 我知道我应

我正在将b2BodyDef添加到我的场景中,如下所示:

    b2BodyDef platformBodyDef;
    platformBodyDef.type = b2_dynamicBody;
    platformBodyDef.position.Set(40, 495);
    platformBodyDef.userData = platforms;
    _body = _world->CreateBody(&platformBodyDef);
我知道我应该使用联系人侦听器,但我是Box2D新手,这对我来说就像是另一种语言,那么我应该如何编写代码来查看我的CCScene中的一个CCSprite是否与此b2BodyDef冲突?这个b2BodyDef将是动画,但我现在不担心这一点。 有人知道我怎么做吗


谢谢

有一个非常好的教程介绍如何做到这一点

基本上,您要做的是创建一个contactListener,用于侦听实体之间的碰撞。确保已标记精灵,然后在联系人侦听器中加载碰撞的两个对象的精灵数据。通过检查标记,可以识别碰撞的精灵


从那里你几乎可以做任何事情,因为你有一个关于精灵,身体和世界的参考。例如,在前面的示例中,移除砖块。

有一个非常好的教程介绍如何执行此操作

基本上,您要做的是创建一个contactListener,用于侦听实体之间的碰撞。确保已标记精灵,然后在联系人侦听器中加载碰撞的两个对象的精灵数据。通过检查标记,可以识别碰撞的精灵


从那里你几乎可以做任何事情,因为你有一个关于精灵,身体和世界的参考。例如,在前面的示例中,移除砖块。

由于我创建了此线程,我成功地将其添加到我的项目中。但我目前面临的问题是如何停止一次冲突的多个回调。你知道这是否可行吗?很抱歉回复太晚-希望它能帮助其他人。。。在contactListener的precalc方法中,您可以取消事件。因此,您可以使用要在该方法中删除的标记来标记主体,然后取消该事件。然后当你遍历所有的物体并更新它们的位置等。。。如果精灵被标记为要删除,你就删除它。这就是我要做的,我只要在它发生碰撞时立即更改标记,然后碰撞if语句就不再为该碰撞调用!由于我制作了这个线程,我成功地将它添加到我的项目中。但我目前面临的问题是如何停止一次冲突的多个回调。你知道这是否可行吗?很抱歉回复太晚-希望它能帮助其他人。。。在contactListener的precalc方法中,您可以取消事件。因此,您可以使用要在该方法中删除的标记来标记主体,然后取消该事件。然后当你遍历所有的物体并更新它们的位置等。。。如果精灵被标记为要删除,你就删除它。这就是我要做的,我只要在它发生碰撞时立即更改标记,然后碰撞if语句就不再为该碰撞调用!