[英]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為您處理碰撞,您應該通過分配categoryBits
和maskBits
來告訴它哪個碰撞與哪個碰撞,並且正在執行該碰撞:
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.