我正在爲我的項目製作一款類似遊戲的憤怒的小鳥。除了最基本的東西外,大部分的事情都完成了:在遊戲物理學中給人一種現實的感覺。我最掙扎的部分是傷害。我正在使用libgdx,它提供了Box2d的包裝,因此代碼不應該與任何知道Box2d的人有任何關係。 這是postSolve方法Box2d傷害物理
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
float[] forces = impulse.getNormalImpulses();
int index1 = (Integer) contact.getFixtureA().getBody().getUserData();
int index2 = (Integer) contact.getFixtureB().getBody().getUserData();
if(forces[0] > 0.3)
bodies.get(index1).handleCollision(forces[0]);
if(forces[1] > 0.3)
bodies.get(index2).handleCollision(forces[1]);
}
這翻出被碰撞的機構,並傳遞給它們的正常碰撞衝動,使得他們能夠處理損害。現在,這是機構
@Override
public void handleCollision(float impulse) {
health -= impulse;
else if(health < 50)
isFlaggedForDelete = true;
}
我給健康值,根據它們的大小最初所有機構之一的破壞處理函數和他們應該每一個足夠強大的碰撞發生時獲得相應的損壞。
問題是,圖像中顯示的方式排列的身體。每當任何一個街區發生輕微碰撞時,甚至不會移動,整個結構(我假設)開始振動,下面的街區被破壞(因爲健康),整個結構都會倒塌。
我已經設置了b2VelocityThreshold爲最大值(進一步增加它引入了遊戲中的機構的不良行爲)。 postSolve方法還設置了足夠高的閾值。我的方法有什麼問題?
謝謝。
所以你說normalImpulses數組會給我屬於單個夾具的點的正常衝動? – wirate
你也說「所以即使你有兩個身體幾乎一動不動,一個在另一個上面,如果身體很重,你仍然會得到一個大的正常脈衝」我想我實際上必須考慮到另一個的動量身體。 – wirate
接觸點並不屬於固定裝置,它們只是應用衝動推動固定裝置分開的最佳位置。 – iforce2d