我非常新到Cocos2d和Box2d,我 一直关注tutorials和 一般都是黑客攻击但是,我有一个 问题我无法解决。
我创建了2个实体和灯具(在Box2d世界中)并创建了一个“Contact Listener”对象。该对象存储联系人列表以及“联系点”。
当两个物体碰撞时,会报告一个接触点,但这(我认为)是世界坐标系。
我的问题是我似乎无法将联络点转换为两个身体的可用坐标。
我想在其中添加一个破解图形 精灵(连接到身体)在 两者的接触点 机构/装置
有人解决了这个问题吗?我可能存储相对于“世界”的“接触点”是完全错误的方法。
答案 0 :(得分:6)
以下是如何获得发生碰撞的世界点(或点,最多返回2点)。在B2ContactListener
对象中,BeginContact
或EndContact
个函数:
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)