0
我试图序列化b2World,并且由于Box2D的公司所使用,制作,并在内部删除许多私人物品,这个问题变得更加复杂。我决定,我应该使用这些内部对象得到()函数来得到我需要的数据,并创建它在节省时间基于掀起了“b2Definition”对象,并使用定义与全球工厂“创造”的方法来重新创建对象。如何提取/创建基于JointDef掀起了b2Joint实例
我遇到了一些问题,但我需要帮助:以下代码是我需要的所有JointDef数据,但无法弄清楚如何从指针获取正确类型的对象。
我也想知道如果我甚至应该尝试保存联系人数据....难道是在工厂自动进行创建metods?
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= ????
我需要上面的数据吗?有没有办法得到它?
没有办法避免更改源代码?并在看点2,不提升:: serialize基本上这样做了吗?我记得文档说了一些关于保存ptr指向(身体)的东西,在我的情况下,它是在ptr之前序列化的。我还需要这样做吗?这个技巧是否适用于box2D中的所有指针?如b2ContactEdge和b2JointEdge? – Griffin
没错。 Box2D并没有真正考虑到这种功能,但幸运的是没有太多必要的改变。我不知道任何关于提升的信息(恐怕现在只是简单地看一下) - 即使'深度指针保存'出现了,我怀疑它会给你一个有效的Box2D世界,它会引发关于什么处理用户数据,以及Box2D的新版本可以如何支持。除非我误解了,否则需要向无论如何要序列化的所有内容添加一个函数void serialize(Archive&ar,const unsigned int version),这需要改变Box2D的更改方式。 – iforce2d
哦对不起...还有一个非侵入性的版本,它似乎照顾重复的指针。我敢肯定,如果不使用适当的CreateBody方法,你不会得到工作世界,这意味着在反序列化之后,你仍然需要以某种方式获取第一篇文章中的数据。我不确定你为什么要保存联系人数据......当你添加一个身体到世界上时,这个信息会自动更新。基本上你想用你最初创建它的方式重新创建世界,就是使用CreateBody,CreateFixture等。其他内部像b2ContactEdge可以省略。 – iforce2d