簡體   English   中英

實體在Box2D(LibGDX)中無法正確碰撞

[英]Bodies not colliding properly in Box2D(LibGDX)

因此,在我的游戲中,我有一個多邊形多邊形的box2D動態實體作為我的玩家,一個鏈狀的box2D靜態實體作為靜態盒子。 調試渲染器正確顯示所有框。 當玩家從頂部與盒子碰撞時,它會碰撞,但是當從任一側碰撞時,它都會向右走。 我試圖將多邊形用於靜態框,但是它的行為很奇怪。 我不知道怎么了。

這是代碼:

球員身體和固定裝置的定義:

        bdef=new BodyDef();
        bdef.position.set((WIDTH/2+169)/PPM,100/PPM);
        bdef.type=BodyType.DynamicBody;
        body=world.createBody(bdef);

        PolygonShape shape=new PolygonShape();
        shape.setAsBox(16/PPM,16/PPM);

        fdef=new FixtureDef();
        fdef.shape=shape;
        fdef.filter.categoryBits=B2DVars.BIT_PLAYER;
        fdef.filter.maskBits=B2DVars.BIT_BLOCK;
        body.createFixture(fdef).setUserData("player");

靜態箱體和夾具的定義:

            bdef=new BodyDef();
            fdef=new FixtureDef();
            bdef.type=BodyType.StaticBody;
            bdef.position.set((col+0.5f)*tileSize/PPM,(row+0.5f)*tileSize/PPM);

            ChainShape chainShape=new ChainShape();
            Vector2[] v=new Vector2[5];
            v[0]=new Vector2(-tileSize/2/PPM,-tileSize/2/PPM);
            v[1]=new Vector2(tileSize/2/PPM,-tileSize/2/PPM);
            v[2]=new Vector2(tileSize/2/PPM,tileSize/2/PPM);
            v[3]=new Vector2(-tileSize/2/PPM,tileSize/2/PPM);
            v[4]=new Vector2(-tileSize/2/PPM,-tileSize/2/PPM);
            chainShape.createChain(v);

            fdef.friction=0;
            fdef.shape=chainShape;
            fdef.isSensor=false;
            fdef.filter.categoryBits=B2DVars.BIT_BLOCK;
            fdef.filter.maskBits=B2DVars.BIT_PLAYER;
            world.createBody(bdef).createFixture(fdef).setUserData("block");

編輯:問題不復存在,這是我通過變換設置播放器位置的問題,但是現在我不知道,當我按下按鈕時又如何使播放器移動並在釋放按鈕時停止播放器?

移動DynamicBody不應通過setTransform完成。 設置DynamicBody位置的最流暢方法是通過MouseJoint ,但它是否對您有幫助,取決於您要進行哪種移動。 這個例子是一個很好的起點。

以這種方式使用聯系人監聽器檢查沖突

'if((contact.getFixtureA().getBody() == bodyEdgeScreen &&
                        contact.getFixtureB().getBody() == body2)
                        ||
                        (contact.getFixtureA().getBody() == body2 &&
                                contact.getFixtureB().getBody() == bodyEdgeScreen))'

暫無
暫無

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

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