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。私のrec-collision検出は、回転した長方形用ではありません)

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 に答える