2016-12-05 10 views
0

두 직사각형 사이에 intersects()를 사용하여 충돌 감지 작업을 마쳤습니다. 그러나 플레이어는 직사각형에 갇혀 움직일 수 없습니다. 그래서 나는 플레이어가 움직이기 전에 충돌을 확인하려고 노력 중입니다. 여기 이동하기 전에 Java 충돌 감지

내가 시도 것입니다 :

if(up == true){ 
     Rectangle futurerect = new Rectangle(px,py-=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py-=5; 
      repaint(); 
     } 
    } 
    if(down == true){ 
     Rectangle futurerect = new Rectangle(px,py+=5,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      py+=5; 
      repaint(); 
     } 
    } 
    if(left == true){ 
     Rectangle futurerect = new Rectangle(px-=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px-=5; 
      repaint(); 
     } 
    } 
    if(right == true){ 
     Rectangle futurerect = new Rectangle(px+=5,py,81,150); 
     if(!futurerect.intersects(wallexample)){ 
      px+=5; 
      repaint(); 
     } 
    } 

난 그냥 새로운 사각형을 만들 수 있지만 플레이어가 이동 한 경우, 그리고이 충돌 여부를 확인 할 곳에서. 그럴 경우 이동하지 마십시오.

문제는 플레이어가 사각형으로 이동하면 속도가 느려집니다. 그것은 여전히 ​​벽을 통과하지만 어떤 이유로 느린 속도로 움직입니다.

이 문제의 원인은 무엇입니까?

답변

1

새 직사각형을 인스턴스화하면 py 또는 px가 증가/감소하고 해당 값을 Rectangle 생성자에 할당하므로 올바른 영역을 확인하지 않은 것처럼 보입니다.

따라서 데카르트 0,0에 플레이어가 있고 플레이어가 위로 올라 갔는지 알기를 원하면 벽에 부딪 힙니다.

if (up == true) { 

    Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

    if(!futurerect.intersects(wallexample)){ 
     py-=5; 
     repaint(); 
    } 
} 

사각형이 인스턴스화되면 이제 py가 -5로 설정됩니다.

Rectangle futurerect = new Rectangle(px,py-=5,81,150); 

때문에 두 번째 매개 변수에서 py- = 5입니다.

교차 검사를 수행하면 0, -5가 표시됩니다. 일단 "예, 여기 벽이 없습니다"라고 말하면 다른 것을 5 점 감합니다. 이제 우리는 플레이어 좌표 px, 0, -10의 py를 얻습니다. 그리고 그 위치의 벽을 확인하지 않았습니다. 지금 내 실수를 참조

Rectangle futureRect = new Rectangle(px, py - 5, 81, 150); 
+0

아, 감사합니다 :

는 PX/PY에 새 값을 할당하지 않도록 여기에 논리를 고정하십시오. – joey942