我的建议是在施工期间跟踪固定装置。您必须在某个时候创建这些固定装置,对吗?因为您没有标记任何特定版本的 box2d,所以我假设您使用的是 c++ 版本。
box2d 允许您SetUserData为夹具。如果您还没有使用,userData那么您可以使用它来引用存储灯具邻居的对象。一个简单的结构可能如下所示:
struct FixtureNeighbors
{
b2Fixture* leftNeighbor;
b2Fixture* rightNeighbor;
};
在构造夹具期间,您应该创建一个FixtureNeighbors对象,将其转换为 a void*,然后调用b2Fixture::SetUserData。然后,在游戏过程中,只要您想知道谁是灯具的邻居,只需 call b2Fixture::GetUserData,将结果转换回一个fixtureNeighbors对象,并使用它来访问左右邻居。
笔记
如果您已经在使用fixtureuserData来指向一个实体或其他东西,您应该在结构中添加一个GetEntity方法,FixtureNeighbors并且如果您拥有fixture,您仍然可以访问该实体。
如果一个夹具可以接触两个以上的邻居,只需使用 stlvector来存储它们的列表。
我希望这有帮助!