我有一个可拖动的矩形和多个静态矩形。我知道如何检测两个矩形是否发生碰撞,一旦我检测到两个矩形之间的碰撞,我将可拖动的矩形替换为最近的非碰撞位置。但问题是,如果实际最近的位置被其他一些静态矩形占据,我无法找出任何好的算法将其替换为“另一个”最近的位置。在这张图片中清楚地看到了所有内容:http://i.stack.imgur.com/hocZR.png
您能否提出解决问题的方法或指出可以帮助我自己找到的资源?
以下是我检测两个矩形之间碰撞的方法:
function detectCollision(r1, r2) {
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
}
答案 0 :(得分:0)
也许只是让它不允许你放置矩形直到它没有被任何其他矩形占据的地方
答案 1 :(得分:0)
也许你可以让可拖动的矩形像其他矩形一样静止,这样你就不会遇到你现在想要解决的问题。
答案 2 :(得分:0)
这可能不会一直有效,而是代替:
if(rect = findcollision())
move_out_of_the_way(rect);
执行:
while(rect = findcollision()){
move_out_of_the_way(rect);
}
如果循环运行超过10次,你就放弃了。