在我的游戏中,用户做某事后,身体会随机重新定位在屏幕上。但是,如果对象被重新定位到另一个身体的顶部,那么两者都会被轻轻推动(以腾出空间!)。我想首先检查随机生成的坐标的位置,以便仅在位置空闲时才进行重定位(无论如何在一定直径内)。
像.. location.hasBody() 之类的东西。肯定有一个我还没有找到的功能。谢谢!
没有办法用点查询世界并得到body,但你可以做的是用一个小盒子查询世界:
// Make a small box.
b2AABB aabb;
b2Vec2 d;
d.Set(0.001f, 0.001f);
aabb.lowerBound = p - d;
aabb.upperBound = p + d;
// Query the world for overlapping shapes.
QueryCallback callback(p);
m_world->QueryAABB(&callback, aabb);
if (callback.m_fixture)
{
//it had found a fixture at that position
}
解决方案原贴在这里:Cocos2d-iphone 论坛
不确定是否box2d
包括“干净”的方式来做到这一点。我只是在添加新物体之前手动迭代世界上的所有物体,并manually
检查它们的位置+无线电/大小是否与新的身体形状重叠。
尝试
b2Vec2 vec = body->GetPosition(); // in meters
或者
CGPoint pos = ccp(body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO); // in pixels