0
給出rect s1 = {x, y, w, h}
和另一個rects s2 = {x, y, w, h}
和一個向量v = {x, y}
。並假設s1
已根據v
移動,我想檢查它是否重疊。我有錯誤的算法測試重疊rects(?)
我有這樣的算法:
isOverlapping = not (s1.x + s1.w + v.x < s2.x
or s1.x + v.x > s2.x + s2.w
or s1.y + s1.h + v.y < s2.y
or s1.h + v.y > s2.y + s2.h)
但它似乎沒有正常工作,但我不能甚至說什麼是錯的,因爲我不理解的事。由於其性質,我甚至無法將它分解成更小的片斷。
isOverlapping = not (right_edge_of_s1_plus_move < left_edge_of_s2
or left_edge_of_s1_plus_move > right_edge_of_s2
or top_edge_of_s1_plus_move < bottom_edge_of_s2
or bottom_edge_of_s1_plus_move > top_edge_of_s2)
isOverlapping = not (s1_overlaps_s2_on_left_edge
or s1_overlaps_s2_on_right_edge
or s1_overlaps_s2_on_bottom_edge
or s1_overlaps_s2_on_top_edge)
這意味着它們不會重疊,只要s1在一個邊緣上重疊s2 ...什麼?
奇怪的是,在我的程序中,它只有在s1試圖移動到s2下時才起作用。其他一切正常。
所以我的問題是:什麼是正確的測試算法,如果兩個移動框相互重疊(AABB)和我有什麼樣的算法在這裏?我知道我從某個地方得到了它,但我找不到我的來源了。我只是添加了額外的運動矢量。
使用本:http://gamedev.stackexchange.com/a/587 –
好吧,這工作得很好,但我仍然有興趣在爲什麼另一種算法是錯誤的/我在那裏計算的天哪。因爲它的工作部分。 – hgiesel
順便說一句,如果你的AABB沒有改變它的大小,那麼你只需要檢查位移矢量的x/y是否小於矩形的寬度/高度。 I.e .:'isOverlapping = abs(v.x)