2014-06-21 60 views
2

我有兩個座標對,存儲爲名爲ap1 {x:x, y:y}ap2 {x:x, y:y}的對象。 我想創建一個if語句來看看他們是嚴格按照下列之一:javascript比較兩個座標對的位置

  • 一個是一個空間在任何方向的對角線與其他
  • 一個是一個空間的上方或下方的其他

到目前爲止,以下是我的代碼:

if((ap1.x == ap2.x &&(ap1.y == ap2.y + 1 && ap1.x == ap2.x || ap2.y == ap1.y + 1)) 
    || (ap1.x == ap2.x + 1 && ap1.y == ap2.y + 1) 
    || (ap2.x == ap1.x + 1 && ap2.y == ap1.y + 1) 
    || (ap1.x == ap2.x - 1 && ap1.y == ap2.y - 1) 
    || (ap2.x == ap1.x - 1 && ap2.y == ap1.y - 1)) 

但有了這個,廣場被一個空間左下角或其他唐的右上方沒有回報。我如何按照我想要的方式製作這個功能? 這裏是一個形象:

我想我的代碼的另一種改進,這不起作用或者:

if(ap1.y == ap2.y + 1||ap1.y == ap2.y - 1||(ap1.x == ap2.x + 1 && ap1.y == ap2.y + 1)||(ap1.x == ap2.x - 1 && ap1.y == ap2.y - 1)) 
+0

這是繪製圖片可以派上用場的地方。網格如何工作以及物體如何移動?取決於它可能比你想象的更容易。 –

+0

網格方塊是1x1嗎?請注意,這是可能的,這是基本的碰撞檢測。 –

回答

0

y的頂部矩形和底部矩形的角度來看它。然後,對於x的位置,它將與ap1相同,或者與右側或左側相同。

if(((ap1.y == ap2.y + 1) || (ap1.y == ap2.y - 1)) // 1 above or bellow 
    && (ap1.x == ap2.x - 1) || (ap1.x == ap2.x) || (ap1.x == ap2.x + 1)) // 3 rect points 
1

爲了便於理解,你可以分開的條件,像這樣:

var aboveOrBelow = ap1.y == ap2.y + 1 || ap1.y == ap2.y - 1; 
var leftToRight = ap1.x >= ap2.x - 1 && ap1.x <= ap2.x + 1; 

if (aboveOrBelow && leftToRight) { 
} 
+1

很好的閱讀代碼,絕對比我的更好的答案。甚至不需要解釋':)' –