2011-12-27 107 views
0

我一直在試圖讓我的小自上而下的遊戲碰撞。我有一羣追逐玩家的實體。如果我沒有碰撞,他們顯然會最終捆綁在同一個地方。我知道如何檢查是否有碰撞,但是如何對它做出反應是我無法弄清楚的。我從幾個小時就搞定了它,但它並不是很好。追逐玩家的實體之間的碰撞檢測

if (check_collision(enemies[e1]->xPos, enemies[e1]->yPos, SIZE_ENEMY, SIZE_ENEMY, enemies[e2]->xPos, enemies[e2]->yPos, SIZE_ENEMY, SIZE_ENEMY) == true) 
{ 
     //the distance that is intersecting 
    float dx, dy; 

    if (enemies[e1]->xPos > enemies[e2]->xPos) 
     dx = enemies[e2]->xPos + SIZE_ENEMY - enemies[e1]->xPos; 

    if (enemies[e2]->xPos > enemies[e1]->xPos) 
     dx = enemies[e1]->xPos + SIZE_ENEMY - enemies[e2]->xPos; 

    if (enemies[e1]->yPos > enemies[e2]->yPos) 
     dy = enemies[e2]->yPos + SIZE_ENEMY - enemies[e1]->yPos; 

    if (enemies[e2]->yPos > enemies[e1]->yPos) 
     dy = enemies[e1]->yPos + SIZE_ENEMY - enemies[e2]->yPos; 

    if (dx < dy) 
    { 
     enemies[e1]->xPos += (dx/2); 
     enemies[e2]->xPos -= (dx/2); 
    } 

    if (dy < dx) 
    { 
     enemies[e1]->yPos += (dy/2); 
     enemies[e2]->yPos -= (dy/2); 
    } 

} 

我可能只是完全做錯了,或者我可能只是缺少一些東西,所以任何幫助表示讚賞。

+0

希望,我還沒有做出錯誤你可能有更多的運氣張貼在http://gamedev.stackexchange.com/ – 2011-12-27 17:43:35

回答

0

當計算實體的下一個位置時,檢查是否會與另一個實體發生衝突。如果會 - 只是不要移動這個實體。

另一種方法是計算從一個實體到另一個實體的距離和向量。距離由畢達哥拉斯定理計算:d = (x1-x2)^2 + (y1-y2)^2。如果d < 2*SIZE_ENEMY,然後將它們重疊,你應該爲至少DD = 2*SIZE_ENEMY - d移動它們中的一個遠離由矢量(X2-X1,Y2-Y1):

newx2 = X2 +(X2-X1)* DD /(2 * SIZE_ENEMY)

newy2 = Y2 +(Y2-Y1)* DD /(2 * SIZE_ENEMY)公式:)

+0

另外,看矢量數學:http://en.wikipedia.org/wiki/Euclidean_vector。這是相對簡單的,但會在2D遊戲中大大幫助你。 – werewindle 2011-12-27 18:29:09