在Cocos2d&中获取身体上的接触点Box2D的

时间:2011-02-17 19:17:46

标签: iphone c++ cocos2d-iphone box2d

  

我非常到Cocos2d和Box2d,我   一直关注tutorials和   一般都是黑客攻击但是,我有一个   问题我无法解决。

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

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

我的问题是我似乎无法将联络点转换为两个身体的可用坐标。

  

我想在其中添加一个破解图形   精灵(连接到身体)在   两者的接触点   机构/装置

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

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:3)

结帐this。看看b2Body::GetLocalPoint(const b2Vec2 &worldPoint)