這是我爲大學任務而努力的事情,我對它很陌生,但我在這方面做了大量的閱讀。請有人用最簡單的術語來解釋如何做我想做的事情,以便我能理解需要發生什麼?檢測多個對象之間碰撞的正確方法是什麼?
我有一個對象數組,每個對象畫一個圓圈;我讓他們在一個邊框內彈跳,但現在我想讓他們碰撞。
我寫了下面的方法,這是工作......但只是只是。球偶爾會卡在一起,'抖動',我不知道爲什麼會發生這種情況。另外,我想我正在檢查比所需更多的碰撞(?)。
void handleObjectCollision() {
for(int i = 0; i < _myBtns.length; i++) {
if(i != _id) {
float dx = _myBtns[i].x - x;
float dy = _myBtns[i].y - y;
float distance = sqrt(dx*dx + dy*dy);
if(distance < r * 2) {
xS = -xS;
yS = -yS;
// Debug
// println("Collision!");
}
}
}
我的階級和有關段的充分貼合可以在這裏找到:http://pastebin.com/eJawiHAE。
此外,這裏是我一直在努力的一個例子,http://processing.org/learning/topics/bouncybubbles.html。
我試圖實現一個簡單的反彈(速度反轉?),沒有添加物理或使用矢量,因爲我希望能夠理解最簡單的形式發生了什麼,首先。
謝謝。
什麼是xS和yS? – mshang 2012-01-10 21:46:10
@mshang似乎是yS和yS-- x和y座標的球的速度。但我不明白什麼是x和y(在expr中:_myBtns [i] .x-x)。 – 4ndrew 2012-01-10 21:47:30
另外,我可以指出,你確實在檢查比所需更多的碰撞,但只有2次。例如,要檢查圓A,B和C之間的衝突,您正在檢查AB,AC,BA,BC,CA,CB,而您只需檢查AB,AC和BC。減少檢查有更復雜的方法。這是一個廣闊的研究領域。 – mshang 2012-01-10 21:49:35