簡體   English   中英

Box2d中動態和靜態物體之間的沖突行為

[英]Confilicting behavior between dynamic and static bodies in Box2d

我在游戲屏幕的周圍創建了鏈形狀(靜態物體),尺寸為:

    (2f*camera.viewportWidth,2f*camera.viewportHeight).

每個鏈形的密度為5f

我還創建了一個圓形(動態物體),

    density = 0.5f 
    friction = 0.25f
    restitution =0.2f. 

另外,我創建了一個多邊形形狀,設置為箱形(動態物體),其密度,恢復性和摩擦力與圓形相同。

世界的引力是(0,-5.8f)

所有形狀都會正確渲染。 但是, 盒子形狀會一直保持恰好落在屏幕底部的底部鏈狀形狀中。 圓形不通過,但方框通過。 我不希望這種情況發生。 盒子形狀的大小是

    (1.96f*camera.viewportWidth, 1.96f*camera.viewportHeight). 

此主體(盒形)的位置設置為

    (0.02f*camera.viewportWidth, 0.02f*camera.viewportHeight). 

我不知道為什么盒子形狀會一直掉下去而不會被底部鏈條形狀擋住,就像圓形形狀被擋住一樣。 誰能提供任何見解?

另外,我試圖像這樣設置box2d世界的原因是為了消除當我使用camera.translate在世界各地移動時出現的一些相機滯后運動。 我的想法是通過將線性速度應用於其主體來移動其形狀。 請任何想法將不勝感激。

您可能未在這些燈具上設置過濾 看下面的例子

    FixtureDef f = new FixtureDef();

    f.density = density;
    f.friction = friction;
    f.restitution = restitution;

現在,如果您希望Box2D為您處理碰撞,您應該通過分配categoryBitsmaskBits來告訴它哪個碰撞與哪個碰撞,並且正在執行該碰撞:

    f.filter.categoryBits = categoryBits; //who am I?
    f.filter.maskBits = maskBits;         //with who I will collide?

位應為short型且為2的冪 -不能將兩個位定義為相同的值。 您可以使用邏輯和(' | '運算符)來設置許多maskBits。

    public static final short BIT_F1 = 2;
    public static final short BIT_F2 = 8;
    public static final short BIT_F3 = 32;

    FixtureDef f1, f2, f3;

    //creating f1, f2, f3...

    f1.filter.categoryBits = BIT_F1;
    f2.filter.categoryBits = BIT_F2;
    f3.filter.categoryBits = BIT_F3;

    f1.filter.maskBits = BIT_F1; //now every body having f1 fixture will collide with another f1
    f2.filter.maskBits = BIT_F1; //f2 will collide with f1
    f3.filter.maskBits = (short)(BIT_F1 | BIT_F2 | BIT_F3); //f3 collides with everything

請注意,如果您想讓燈具避免任何碰撞,則可以將其作為傳感器,例如:

    f.isSensor = sensor;

這里是官方文檔的鏈接,盡管說實話並沒有太大幫助。

暫無
暫無

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

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