私のゲームでは、ユーザーが何かをした後、画面上で体がランダムに再配置されます。ただし、オブジェクトが別のボディの上に再配置された場合、両方がわずかに押されます (スペースを空けるためです!)。最初にランダムに生成された座標の位置を確認したいので、位置が空いている場合にのみ再配置が行われます(とにかく特定の直径内)。
のようなもの.. location.hasBody(). これには、私が見つけていない機能がきっとあるはずです。ありがとう!
ポイントで世界をクエリしてボディを取得する方法はありませんが、小さなボックスで世界をクエリすることはできます。
// 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