我很难找出程序中的错误。
我的代码只适用于 2
个矩形,但如果我增加矩形的数量,它根本不起作用。
我的程序流程是这样的:
伪代码
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()
}
}
}
}
我确实尝试了我在 google 和我的搜索中搜索的所有矩形碰撞检测算法,但我这里似乎有一个逻辑缺陷
。
(PS。我的 rec-collision 检测不适用于旋转的矩形)
最佳答案
为什么里面有 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()
}
关于java - 矩形到N个矩形碰撞检测的逻辑流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278335/