2013-04-26 19 views
0

我需要這樣做,以便當我創建的精靈與每個精靈發生碰撞(我已經計算出碰撞)時,他們會傳送到它們之前的最後一個x和y位置相互碰撞,以免彼此經過。我試圖使用這個代碼。在兩個精靈發生碰撞之前得到最後一倍

double x, y, x2, y2; 
if(!r1.intersects(r2)){ 
    x = z.getX(); 
    y = z.getY(); 
    x2 = z2.getX(); 
    y2 = z2.getY(); 
} 
if(r1.intersects(r2)){ 
    z.setX(x); 
    z.setY(y); 
    z2.setX(x2); 
    z2.setY(y2); 
} 

但它不起作用,因爲所有的精靈都在彼此內部。我也嘗試過使用這個。

if(r1.intersects(r2)){ 
    z.setX(z.getX() - 1); 
    z.setY(z.getY() - 1); 
    z2.setX(z2.getX() + 1); 
    z2.setY(z2.getY() + 1); 
} 

該代碼使得它使得精靈無法通過對方,但,使得釀出第一精靈變得快得多比後來者,因爲它更精靈是衝突的開始,它將使與彼此。

回答

1

我認爲這些精靈比簡單的圓圈更復雜?我還假設你已經實現了一些「包圍盒」碰撞檢測。

如果是這樣的話,我會在檢測到碰撞後計算一個向量。向量將是每個精靈相對於它們的中心點彼此相交的幅度。然後,您可以沿着矢量沿相反方向移動每個精靈,根據它們相交的距離進行縮放。這將定位每個精靈,以便他們只是觸摸。

這是一個很好的解決方案,因爲如果每個精靈以每幀超過1個像素的速度移動,每個精靈的最後位置可能是10個像素之外。它永遠不會像他們實際上相撞。

..這將適用於複雜的精靈和簡單的圓圈。