我正在尝试序列化b2World,由于Box2D的许多私有对象在内部使用,制作和删除,问题变得更加复杂。我决定使用这些内部对象get()函数来获取我需要的数据,并在保存时创建一个基于它的“b2Definition”对象,并使用全局工厂“create”方法的定义来重新创建对象
我遇到了一些我需要帮助的问题:在下面的代码中是我需要的所有JointDef数据,但是无法弄清楚如何从指针到正确类型的对象。< /强>
我也想知道我是否应该尝试保存联系人数据....是否在工厂自动制作创建方法?
b2WeldJointDef JointDef; //QUESTION: how do i get this
//JointDef.referenceAngle= Joint-> ?????
b2GearJointDef JointDef; //QUESTION: how do i get these
//JointDef.joint1= Joint-> ??????
//JointDef.joint2= Joint-> ??????
b2LineJointDef JointDef; //QUESTION: how do i get these??
//JointDef.localAxisA= Joint-> ????
//JointDef.lowerTranslation= Joint-> ????
//JointDef.upperTranslation= Joint-> ????
b2MouseJointDef JointDef; //No problems
b2PrismaticJointDef JointDef; //QUESTION: how do i get these??
//JointDef.referenceAngle= Joint-> ????
//JointDef.localAxis1= Joint-> ????
//JointDef.lowerTranslation= Joint-> ???? //JointDef.upperTranslation= Joint-> ????
//JointDef.maxMotorForce= Joint-> ????
b2PulleyJointDef JointDef; //QUESTION: how do i get these?
//JointDef.maxLengthA= Joint-> ????
//JointDef.maxLengthB= Joint-> ????
b2RevoluteJointDef JointDef; //QUESTION: how do i get these?
//JointDef.maxMotorTorque= Joint-> ????
//JointDef.referenceAngle Joint-> ????
//JointDef.lowerAngle= Joint-> ????
//JointDef.upperAngle= Joint-> ????
b2JointDef JointDef;
//JointDef.collideConnected= ????
我需要上面的数据吗?有办法搞定吗?
答案 0 :(得分:1)
我最近做了很多这样的事情来制作导出/导入实用程序,将Box2D世界序列化为JSON,然后再次加载它。您可能会发现源代码很有用 - 请查看http://www.iforce2d.net/b2djson向下滚动,您可以看到源代码,查看函数b2dJson :: b2j(b2Joint * joint)
这并不复杂,您只需要检查关节类型并转换为该类型的指针即可访问内容:
switch ( joint->GetType() )
{
case e_revoluteJoint:
{
b2RevoluteJoint* revoluteJoint = (b2RevoluteJoint*)joint;
...
}
}
但有几点需要注意: