提问者:小点点

B2Body::SetUserData是否已弃用


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

body->SetUserData(this);

如果我看一下b2d的源代码,我可以找到这个函数

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

然而,当我尝试在我的新项目中设置这个用户数据时(可能使用box2d的最新版本),这个函数就不存在了

该函数是否已被弃用?还是我设法移除了一个应该存在的功能?


共1个答案

匿名用户

在进一步调查之后,我发现这个函数已经被弃用了,因为用户数据的设置已经被更改为了包装器结构。

旧的设置如下:

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()返回对该结构的非常量引用,该引用可以修改,以提供相同的功能。