【问题标题】:Box2D - b2Fixture touchingBox2D - b2Fixture 触摸
【发布时间】:2013-10-07 00:09:31
【问题描述】:

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

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

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

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

希望有人能理解我。并为糟糕的图像感到抱歉(:

提前谢谢你。

问候亚历克斯

【问题讨论】:

    标签: math box2d physics


    【解决方案1】:

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

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

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

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

    备注

    如果您已经使用fixture userData 指向实体或其他东西,您应该将GetEntity 方法添加到您的FixtureNeighbors 结构中,如果您拥有fixture,您仍然可以访问该实体。

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

    我希望这会有所帮助!

    【讨论】:

    • 嗨 NauticalMille,这个建议听起来很棒。是的,你是对的,我使用的是 c++ 版本。我会试试(:
    • 如果您有任何问题,请发表评论。我很乐意澄清任何事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多