2014-02-25 3 views
1
public void update() { 
    speedY = bg.getSpeedY()/2; 
    tileY += speedY; 
    r.set(tileX, tileY, 50, 48); 
    // Collision with cycle here: 
    if (tileY > 480) { 
     r = null; 
    } 
    if (tileY < 480) { 
     checkCollision(); 
    } 
} 

private void checkCollision() { 
    if (type != 0) { 
     boolean val = Rect.intersects(Cycle.rect, r); 
     if (val) { 
      test = true; 
     } 
    } 
} 

디버거를 사용하여 모든 직사각형이 올바르게 업데이트되고 Cycle.rect가 올바른 직사각형 위치를 반환한다고 결정했습니다. 직사각형이 첫 번째 검사에서 교차하는 경우 제대로 작동합니다. 그러나 업데이트가 실행되면 intersects는 true를 반환하지 않습니다. 왜 이것이 일어날 수 있습니까? 나는 디버깅을 돕기 위해서만 boolean val을 사용했다.직사각형이 첫 번째 검사에서 교차하는 경우 직사각형 만 간섭하는지 확인

가 나는 사각형이 교차 될 것으로 판단 두 값이 기록되지 않지만 :

R : 02-24 23 : 32 : 50.762 : V/사각형 (16624) : 사각형 (50 314 - 50 48) Cycle.rect : 02-24 23 : 32 : 50.762 : V/Rect (16624) : Rect (49,329-100,100)

+0

그것은 단지이 정보와 답변을 조금 어렵다. 아마'type'은 0입니까? 아마'Cycle.rect'는'r'과 정말로 교차하지 않을까요? 'Cycle.rect'와'r'의 각 위치를 확인하십시오. 또한, 'tileY' 값을 로깅하는 것이 도움이 될 수 있습니다. –

+0

tileY를 로깅하는 대신 두 개의 직사각형을 기록하여 교차하는지 확인했습니다. 유형 검사가 기록되지 않았으므로 유형이 0이 아닌 것으로 알고 있습니다. 02-24 23 : 32 : 50.762 : V/Rect (16624) : Rect (50, 314 - 50, 48) 02-24 23 : 32 : 50.762 : V/Rect (16624) : Rect (49, 329 - 100, 100) 이 두 직사각형은 교차해야합니까? – seanEP

+0

내 대답을 확인하십시오. 약간의 실험을 한 후, 당신의 맨 아래쪽 값을 바꾸면, 나는 당신의'Rect' 교차를 얻습니다. –

답변

0

문제는 Java의 좌표계에 있으며, 따라서, Recttop 좌표가 보다 작 으면bottom보다 작 으면 "정의 됨"입니다. 그렇지 않으면 비어있는 것으로 간주됩니다. Rect API reference 가입일

,

주 : 대부분의 방법은 좌표 (즉 < = 오른쪽 상단 < = 하단 좌측)이 올바르게 정렬되어 있는지를 확인하지 않는다. 또한 set()에 대한

(참고 : 광산에 강조),

지정된 값으로 사각형의 좌표를 설정합니다. 참고 : 범위 검사는 수행되지 않으므로 의 호출자가 왼쪽 < = 오른쪽 상단의 < = 하단이되도록하십시오. (> = 오른쪽 또는 맨> = 아래 왼쪽)가 true

그리고 isEmpty()

반환 사각형이 비어있는 경우

+0

당신은 락! 나는 높이와 너비로 위아래를 사용했다. 그 모든 오류가 발생했습니다. 감사! – seanEP