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