2014-06-21 2 views
2

저는 두 좌표 쌍을 가지며 ap1 {x:x, y:y}ap2 {x:x, y:y}이라는 객체로 저장됩니다.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

아주 잘 읽는 코드, 확실히 내 것보다 나은 대답입니다. 설명도 필요 없다.':)' –

관련 문제