Ios cocos2d/box2d中仅一侧碰撞

Ios cocos2d/box2d中仅一侧碰撞,ios,cocos2d-iphone,box2d,collision-detection,Ios,Cocos2d Iphone,Box2d,Collision Detection,我正在iOS/xcode中使用cocos2d和box2d开发一个应用程序 我有一个移动的精灵和一些方形的盒子,我可以检测到碰撞没有问题,这很好 不过,我只需要检查目标一侧的碰撞,并且根据精灵击中目标的哪一侧,有不同的行为 把它想象成一个有三个封闭边和一个开放边的盒子——如果精灵击中三个封闭边中的任何一个,那么它应该失败/死亡,但是如果它与目标的“开放”边碰撞,那么它应该掉进去 因此,我需要能够区分一侧碰撞与另一侧碰撞之间的区别,而不仅仅是检查是否存在任何碰撞 有什么想法/建议吗?你知道盒子的边界

我正在iOS/xcode中使用cocos2d和box2d开发一个应用程序

我有一个移动的精灵和一些方形的盒子,我可以检测到碰撞没有问题,这很好

不过,我只需要检查目标一侧的碰撞,并且根据精灵击中目标的哪一侧,有不同的行为

把它想象成一个有三个封闭边和一个开放边的盒子——如果精灵击中三个封闭边中的任何一个,那么它应该失败/死亡,但是如果它与目标的“开放”边碰撞,那么它应该掉进去

因此,我需要能够区分一侧碰撞与另一侧碰撞之间的区别,而不仅仅是检查是否存在任何碰撞


有什么想法/建议吗?

你知道盒子的边界。假设只允许从箱子的左侧穿过

cgp1点;//触摸上一个位置
cgp2;//触摸当前位置
CGRect r=box.boundingBox;
CGA点=r原点;
CGPoint B=ccpAdd(A,ccp(0.f,r.尺寸.高度));
//我们有直线AB
//如果p1位于AB的左侧,则
//p2位于AB的右侧
//那么路径是允许的
//
//d1是p1的侧面指示器
//d2是p2的侧面指示器
//如果di<0,则pi位于AB的左侧
//如果di==0,则pi在AB上
//如果di>0,则pi位于AB的右侧
//如果直线是水平的,如果点在直线上方,di<0
浮点d1=(p1.x-A.x)*(B.y-A.y)-(B.x-A.x)*(p1.y-A.y)
浮点d2=(p2.x-A.x)*(B.y-A.y)-(B.x-A.x)*(p2.y-A.y)

布尔值被允许=d1<0&&d2>0;//您可以使用>=并通过焊接接头将另一个薄框(如线)连接到框的一侧,并为其提供用户数据,然后检查碰撞Singhak所说的,除非您不需要焊接接头和单独的实体,你可以在原物上放更多的固定装置。我正在考虑按照辛格哈克的建议做——创建两个独立的物体,一个大的,覆盖一个小的物体的三个侧面。您能否进一步阐述您的建议“您可以在原始主体上放置更多固定装置”@Richard iforce2d想说您可以创建另一个固定装置并添加到同一主体上。由于主体可以有不同类型的固定件,因此在这一点上与@iforce2d一致。按照手册要求,焊接接头“弯曲”。您正在寻找固定装置。将其标记为传感器,并为其提供用户数据,以便在联系人侦听器中的预解算阶段对其进行区分。