2014-12-27 2 views
0

2 div가 겹치는 경우를 감지하고, 그렇다면 사각형 1의 오른쪽과 사각형 2의 왼쪽 사이의 거리, 사각형 1의 상단 및 사각형 2의 바닥 사이의 거리를 확인합니다. , 요법. 어떤 이유 자바가 두 div 사이의 충돌 축을 감지 할 수 없습니다.

if (rect1.right > rect2.left && 
     rect1.left < rect2.right && 
     rect1.top < rect2.bottom && 
     rect1.bottom > rect2.top) { 

     //collision detected. 

     var dtop = Math.abs(rect1.top - rect2.bottom); 
     var dbot = Math.abs(rect1.bottom - rect2.top); 
     var dright =Math.abs(rect1.right - rect2.left); 
     var dleft = Math.abs(rect1.left - rect2.right); 
     var closestSide = Math.min(dtop,dbot,dright,dleft); 

     if (closestSide == dleft || dright) { 
      collisionAxis = "x"; 
     } 

     if (closestSide == dtop || dbot) { 
      collisionAxis = "y"; 
     } 

     alert("collisionAxis: " + collisionAxis); 

     return collisionAxis; 

    } 

는 collisionAxis 항상 "Y" even when closestSide == dleft || dright, collisionAxis 설정해야 할 설정되는 "X"... 여기

JSFiddle의 예는이다. 내 DetectCollision 함수의 변수 collisionAxisclosestSide = dright부터 흰색 직사각형이 검은 사각형과 충돌 할 때 "x"로 설정해야하지만 어떻게 든 "y"로 설정됩니다.

아무도 말해 줄 수 있습니까?

+0

편집 : 추가 JSFiddle 링크. –

답변

1

그것은해야한다,

if (closestSide == dleft || closestSide == dright) { 
     collisionAxis = "x"; 
    } 

    if (closestSide == dtop || closestSide == dtopdbot) { 
     collisionAxis = "y"; 
    } 
+0

안녕하세요, 고마워요.이 코드와 제 코드의 차이를 볼 수는 있지만, closestSide == dleft ||는 아닙니다. 논리적으로 똑같은가? 그런데 나는 이것을 3 분 안에 나를 대답으로 표시 할 것입니다. –

+0

물론 그렇지 않습니다. '(closestSide == dleft || dright)'는'((closestSide == dleft) || (dright))'로 간주됩니다. 이 때문에'dright> 0 '값 모두에 대해 true를 반환합니다. '(closestSide == dtop || dbot)'와 동일합니다. –

+0

아 좋아, 매우 도움이된다. 내 마음 속에서는 closestSide가 dleft 또는 dright와 동등하다면 나는 그것이 사실로 평가 될 것이라고 생각하고있었습니다. 나는 지금 실수 한 것을 이해할 수 있습니다. –

관련 문제