我想做一個排球比賽,並根據box2d模擬每個動作。我想要做的是當球員擊球時有不同的球恢復原狀,球擊中牆壁。所以在第一種情況下,球會飛得更快,而第二種情況會更慢。box2D閃光燈:選擇性的結婚
但是,如果我試圖以不同的方式爲玩家和牆體物品設置賠償,我還會注意到玩家本身正在從牆上彈起......有沒有辦法以選擇性的方式做到這一點?例如。擊球場地不應該導致球員反彈......但是如果球員擊中球,它應該反彈很多。
我想做一個排球比賽,並根據box2d模擬每個動作。我想要做的是當球員擊球時有不同的球恢復原狀,球擊中牆壁。所以在第一種情況下,球會飛得更快,而第二種情況會更慢。box2D閃光燈:選擇性的結婚
但是,如果我試圖以不同的方式爲玩家和牆體物品設置賠償,我還會注意到玩家本身正在從牆上彈起......有沒有辦法以選擇性的方式做到這一點?例如。擊球場地不應該導致球員反彈......但是如果球員擊中球,它應該反彈很多。
不幸的是,你是對的,Box2D還沒有這個設置。
你可以做的是傾聽與球員和球都相匹配的聯繫偵聽器事件。當發生這種情況時,你會對球施加非常大的力量。
編輯
我打這關我的頭頂,我不知道這是完全正確的。
public class MyContactListener extends b2ContactListener {
override public function Add(point:b2ContactPoint):void {
var ball:b2Body = ...
var player:b2Body = ... // fill these
var force:b2Vec2;
if(point.shape1.GetBody() == ball && point.shape2.GetBody() == player) {
force = point.normal.Copy();
force.Multiply(SOMETHING);
ball.ApplyForce(force);
} else if(point.shape1.GetBody() == player && point.shape2.GetBody() == ball) {
force = point.normal.Copy();
force.Multiply(-SOMETHING);
ball.ApplyForce(force);
}
}
}
這是怎麼回事。
你需要創建這個類的一個實例,並將其註冊到可能類似world.SetContactListener(new MyContactListener)
之類的世界。
兩個物體接觸時會觸發Add()方法。施加的力是在接觸法線的方向上(這會使您從一個身體到另一個身體)。
由於聯繫人偵聽器系統的設置方式,球或玩家可能是b2ContactPoint結構中的主體#1,因此您需要爲這種可能性編碼。法線的方向取決於哪一個是身體#1(因此是負號)。我實際上不記得它走哪條路,所以你可能需要扭轉力量(把減號放在另一個分支)。
除此之外,它應該是合理清楚的。 Box2D在這裏似乎並不出名,所以你可能在Box2D論壇上有更多的運氣(http://www.box2d.org/forum/)
一行代碼作爲例子將會非常有幫助:) – 2010-11-24 14:50:31