首页 > 解决方案 > b2Body::SetUserData 是否已弃用

问题描述

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

body->SetUserData(this);

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

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

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

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

标签: c++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()一个non-const可以修改的结构体的引用来提供相同的功能。


推荐阅读