2013-04-29 112 views
0

我在這裏確實很難弄清楚我的程序中的錯誤。矩形邏輯流程到N長方形碰撞檢測

我的代碼只適用於2矩形,但如果我增加矩形的數量,它根本不起作用。

我的程序流程是這樣的:

pseudo code

for (i = 0 to N_of_rectangles - 1) 
{ 

    Rectangle& r1 = rect[i]; 

    if (r1.is_grab_by_mouse()) 
    { 
     for (j = 0 to N_of_rectanges - 1) 
     { 
      if (i == j) 
      { 
       skip_this_loop //skip for any self-checking 
      } 

      Rectangle& r2 = rect[j]; 

      if (not Rectangle.collide(r1, r2)) 
      { 

       if (r1.restricken_move()) break; //restricken move will be true if 
                //*this rect will collide to !*this 
       if (r1.movement == HORIZONTAL) 
        r1.move_x_along_with_mouse() 
       else //VERTICAL 
        r1.move_y_along_with_mouse() 
      } 
      else 
      { 
       r1.resolve_collision() 
      } 
     } 
    } 
} 

我曾嘗試所有的我在谷歌搜索算法的矩形碰撞檢測和防雷但似乎我有一個logic flaw這裏。

(PS。我REC-碰撞檢測是不旋轉的矩形)

+1

是什麼'r1.move()'做什麼?對於沒有碰撞的矩形,它將每個tick執行N_of_rectangles-1次。這可以嗎? – Kevin 2013-04-29 12:21:48

+0

它確實只移動x或y而不是兩者。 – mr5 2013-04-29 12:28:46

回答

1

爲什麼你有2路在那裏? 無論如何,我認爲你應該只是移動r1,如果他根本不碰撞,不是每次他不碰撞矩形。 的代碼應該是這樣的:

boolean collision=false 
    for (j to N_of_rectanges) 
    { 
     if (i == j) 
     { 
     skip_this_loop 
     } 

     if (Rectangle.collide(r1, r2)) 
     { 
     r1.resolve_collision() 
     collision=true 
     } 
    } 
    if(not collision){ 
    r1.move() 
    } 
+0

它有兩個循環,因爲我想'* this'來檢查所有包含的不包含'* this'的矩形。我不認爲這隻適用於1循環(?) – mr5 2013-04-29 12:30:14

+0

你能澄清你的目的,對我來說問題如下: 你有N個矩形;你想檢查鼠標抓住的矩形是否遇到其他矩形。你的第一個循環是要知道一個矩形是否被鼠標抓住了? (如果是這樣,你可能會考慮事件驅動編程)如果可能的話,你可以使用數組來澄清所有這些(矩形[i]和矩形[j])。 我認爲你還應該澄清你在回覆Kevin時所說的y和x動作(編輯問題的主體)。 – MisterJ 2013-04-29 12:38:25

+0

請查看更新後的帖子。謝謝 – mr5 2013-04-29 12:49:52