我正在设置一个box2d主体,使用一些旧代码作为参考,在我的旧代码中,我在设置主体的最后有这一行
body->SetUserData(this);
如果我看一下b2d的源代码,我可以找到这个函数
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()
返回对该结构的非常量
引用,该引用可以修改,以提供相同的功能。