获取Cocos2d和Box2d中的物体上的接触点

rjs*_*ing 3 c++ iphone box2d cocos2d-iphone

我很来的Cocos2D和Box2D的,我一直在下面的教程和黑客一般.但是,我有一个问题我无法解决.

我创建了2个实体和灯具(在Box2d世界中)并创建了一个"Contact Listener"对象.该对象存储联系人列表以及"联系点".

当两个物体发生碰撞时,会报告一个接触点,但这(我认为)是在世界坐标系中.

我的问题是我似乎无法将接触点转换为两个物体上的可用坐标.

我想在两个主体/固定装置上的接触点处向精灵(连接到主体)添加裂缝图形.

有人解决了这个吗?我可能存储相对于"世界"的"接触点"是完全错误的方法.

小智 6

以下是如何获得发生碰撞的世界点(或点,最多返回2个点).在您的B2ContactListener对象,内部BeginContactEndContact功能中:

b2WorldManifold worldManifold;
contact->GetWorldManifold(&worldManifold);
std::cout << "Contact point X: " << worldManifold.points[0].x * Ascengine::Physics::PIXEL_TO_METER_RATIO << " Contact point Y: " << worldManifold.points[0].y  * Ascengine::Physics::PIXEL_TO_METER_RATIO << std::endl;
Run Code Online (Sandbox Code Playgroud)

从这里开始,正如Jason F所提到的,您可以使用b2Body::GetLocalPoint(const b2Vec2 &worldPoint)此世界点转换为本地对象空间.我只是想添加我自己的答案,包括关于获取世界联络点的整个部分,因为在接受的答案中似乎完全省略了这一点.