0

我有一个关于 b2Fixture 的问题。我有一个带有多个固定装置(多边形)的身体。例如,在我的图片中,您可以看到一个带有多个固定装置的主体。身体中间的线应该代表一个点。我的问题是如何确定哪些灯具在哪个站点上,包括连接的灯具。

图1

我的第一个方法是循环遍历每个夹具的所有顶点,并找出当前顶点在直线上的位置(左还是右?)。

但这不起作用,因为右侧的固定装置可以与其他在这条线上重叠的固定装置连接,就像图像中的这里一样。

图2

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

希望有人能理解我。抱歉图片不好(:

先感谢您。

问候亚历克斯

4

1 回答 1

1

我的建议是在施工期间跟踪固定装置。您必须在某个时候创建​​这些固定装置,对吗?因为您没有标记任何特定版本的 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来存储它们的列表。

我希望这有帮助!

于 2013-10-05T15:18:04.413 回答