Box2D - b2Fixture touch

时间:2013-10-04 08:42:11

标签: math box2d physics

我对b2Fixture有疑问。我有一个有多个灯具(多边形)的车身。在我的图片中,你可以看到一个有多个灯具的车身。身体中间的线应代表一个点。我的问题是如何确定哪个灯具在哪个站点上,包括连接的灯具。

Illustration1

我的第一个经历是遍历每个灯具的所有顶点并找出当前顶点从线(左或右?)的位置。

但是这不起作用,因为右侧的灯具可以与其他灯具连接,这些灯具在图像中就像这里一样重叠。

Illustration2

那么有没有办法找出哪个灯具与其他灯具连接?或者我可以从左到右订购灯具吗?

希望有人理解我。对不好的图像感到抱歉(:

提前谢谢。

问候亚历克斯

1 个答案:

答案 0 :(得分:1)

我的建议是在施工期间跟踪灯具。你必须在某个时刻创造这些装置,对吧?因为你没有标记任何特定版本的box2d,所以我假设你使用的是c ++版本。

box2d允许您SetUserData获取灯具。如果您尚未使用userData,那么您可以使用它来引用存储灯具邻居的对象。一个简单的结构可能如下所示:

struct FixtureNeighbors
{
    b2Fixture* leftNeighbor;
    b2Fixture* rightNeighbor;
};

在构建灯具时,您应该创建一个FixtureNeighbors对象,将其转换为void*,然后调用b2Fixture::SetUserData。然后,在游戏过程中,每当你想知道夹具的邻居只是调用b2Fixture::GetUserData时,将结果转换回fixtureNeighbors对象,并使用它来访问左右邻居。 / p>

备注

如果您已使用灯具userData指向实体或其他内容,则应在GetEntity结构中添加FixtureNeighbors方法,如果仍然可以访问实体你有固定装置。

如果一个灯具可以触摸两个以上的邻居,只需使用stl vector来存储它们的列表。

我希望这有帮助!