簡體   English   中英

Box2d復制一個正文(libgdx)

[英]Box2d Copy a body (libgdx)

我想在我的box2d世界中復制一個身體(包括固定裝置,附着在它上面的關節)。

我沒有嘗試任何東西,因為我沒有看到任何方法可以做到這一點。

所以我的問題是:是否有可能復制一個身體? 如果是的話,該如何做到這一點。

我建議創建一個方法來創建一組主體,並將基本組的速度等應用於它們。

    Body createGroup()
    {
        //creating bodies, joints etc
        //returning the root body for joint group
    }

如果你想逐個復制實體,不幸的是沒有簡單的方法來實現它。 雖然我認為可以實現它。

要創建正文副本,通常需要:

  • BodyDef和FixtureDef對象 - 不可能從body中獲取bodyDef,但是在創建body時可以輕松地將它寫入UserData對象,然后只需獲取UserData

     BodyDef bodyDef = new BodyDef(); FixtureDef fixtureDef = new FixtureDef(); //setting up body and fixture definitions body = world.createBody(bodyDef); body.createFixture(fixtureDef).setUserData( fixtureDef ); body.setUserData( bodyDef ); ... //then just somewhere in your app BodyDef copyBodyDef = (BodyDef) body.getUserData(); FixtureDef copyFixtureDef = (FixtureDef) body.getFixtureList().first().getUserData(); 

    當你通過迭代夾具列表將多個夾具連接到主體時,你也應該處理這種情況

  • 位置,速度,阻尼等 - 你可以在應用程序生活中設置一些身體特征,你也可以通過使用像

     Vector2 getLinearVelocity(); Vector2 getPosition() ... 

    你可以在官方的box2d手冊中閱讀有關機構的內容,但在我看來,更好的參考是LibGDX

  • 關節 - 這是我認為最大的問題。 您可以使用以下方法迭代關節:

     for(JointEdge edge : body.getJointList()) { Joint joint = edge.joint; //joint has getUserData() so you can again remember joint definition Body jointBody = edge.other; } 

    但是復制完全相同的配置似乎並不容易,因為你必須檢查你已經創建了哪些關節副本(如果你在身體關節上進行迭代,你也應該迭代它們的neibghbour等等......)

您可以使用Dermetfan中的Utils庫 ,如本文 (LibGDX論壇)中所提議的那樣。 它包含一些非常方便的box2dUtils。 Body clonedBody = clone(body,true); 應該滿足你的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM