0

在我的游戏中,用户做某事后,身体会随机重新定位在屏幕上。但是,如果对象被重新定位到另一个身体的顶部,那么两者都会被轻轻推动(以腾出空间!)。我想首先检查随机生成的坐标的位置,以便仅在位置空闲时才进行重定位(无论如何在一定直径内)。

像.. location.hasBody() 之类的东西。肯定有一个我还没有找到的功能。谢谢!

4

3 回答 3

1

没有办法用点查询世界并得到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 论坛

于 2013-08-25T12:56:34.513 回答
0

不确定是否box2d包括“干净”的方式来做到这一点。我只是在添加新物体之前手动迭代世界上的所有物体,并manually检查它们的位置+无线电/大小是否与新的身体形状重叠。

于 2013-08-24T13:06:08.150 回答
-1

尝试

b2Vec2 vec = body->GetPosition(); // in meters

或者

CGPoint pos = ccp(body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO); // in pixels
于 2013-08-25T14:14:54.647 回答