0

我很难在这里找出程序中的错误。

我的代码只适用于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。我的碰撞检测不适用于旋转的矩形)

4

1 回答 1

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()
  }
于 2013-04-29T12:25:21.600 回答