b2Body::SetUserData 是否已弃用

Is b2Body::SetUserData deprecated

我正在设置一个 box2d 主体,使用一些旧代码作为参考,在我的旧代码中我在设置主体的最后,这一行

body->SetUserData(this);

如果我查看 box2d 源代码,我可以找到这个函数

inline void b2Body::SetUserData(void* data)
{
    m_userData = data;
}

然而,当我尝试在我的新项目中设置此用户数据时(可能使用更新版本的 box2d),该功能并不存在。

该功能是否已弃用?还是我以某种方式设法删除了应该存在的功能?

经过进一步调查,我发现该函数已被弃用,因为用户数据的设置已更改为具有包装器结构。

旧设置如下:

class b2Body
{
public:
    /// Get the user data pointer that was provided in the body definition.
    void* GetUserData() const;

    /// Set the user data. Use this to store your application specific data.
    void SetUserData(void* data);
 
private:
    void* m_userData;

};

inline void b2Body::SetUserData(void* data)
{
    m_userData = data;
}

inline void* b2Body::GetUserData() const
{
    return m_userData;
}

但是现在已经更改为:

class B2_API b2Body
{
public:
    /// Get the user data pointer that was provided in the body definition.
    b2BodyUserData& GetUserData();

private:
    b2BodyUserData m_userData;

};

inline b2BodyUserData& b2Body::GetUserData()
{
    return m_userData;
}

这个结构 b2BodyUserData 定义为

struct B2_API b2BodyUserData
{
    b2BodyUserData()
    {
        pointer = 0;
    }

    /// For legacy compatibility
    uintptr_t pointer;
};

因此设置用户数据的方法不再需要 SetUserData(),因为 GetUserData() returns non-const 对该结构的引用可以修改,以提供相同的功能。