2017-04-07 13 views
0

안녕하세요, 자바로 탁구 게임을 만들려고 노력하고 있으며 모든 것이 충돌 부분을 제외하고 훌륭하게 작동합니다. 먼저 Bounds 클래스를 사용하고이 충돌 문제를 해결하기 위해 intersects 메서드를 사용했지만이 메서드는 내가 그린 그림에 표시된 충돌 경우에만 작동합니다.자바 탁구 충돌 감지

error case

은 그래서 경계 클래스를 사용하는 대신 새로운 코드 나 자신을 쓰고, 나는 성공적으로 측면 충돌 감지를위한 방법을 만들었지 만 내가 다시 패의 상단과 하단에 대한 충돌 감지를 해결하기 위해 힘든 시간을 보내고 있어요 .

public boolean collideRight(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

그리고 위아래 충돌 감지를 위해 만든 방법입니다.

public boolean collideRightUpSide(Ball ball){ 
    if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

누군가 나를 도와 줄 수 있습니까?

+3

정말 무례하게 의미하지 않는다, 그러나 당신이 게임 물리/충돌 기초에 위로 읽어야한다. 이 물건은 복잡하며 몇 가지 접근법이 있습니다. – domsson

+0

그래서 게임 물리학/충돌 기본을 Google에 입력해야합니까? 그런데 정말 고맙다는 충고를 해주셔서 고맙습니다. 이 stackoverflow에 대한 질문을 게시하는 내 처음이며 사람들은 내가 예상했던 것보다 훨씬지지가 많습니다. 고마워요 :) –

답변

0

봅니다 포함하는 둘 경우이 같은 형태의 하나 개의 기능에 문 :

public boolean collideFunction(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 
+0

난 그냥 당신의 충고를 시도하고, 만약 내가 사이드 감지 코드를 첫 번째 if 문을 만들고 그 다음에 상위와 하위 감지 코드를 다음과 같이 만들면 첫 번째 if 문만 제대로 작동합니다. 따라서 순서를 변경하면 상단 및 하단 감지 코드 만 작동합니다. 그래도 조언 주셔서 감사합니다 :) –

+0

어쩌면 당신은 하나의 if 문에 다음 두 가지 조건을 구현할 수 있습니다. 'public boolean collideFunction (Ball ball) { boolean right = ball.getLayoutX() + ball. getRadius()> = player.getLayoutX() .....; 부울 측면 = (ball.getLayoutX() + ball.getRadius()> = player.getLayoutX() ....; (오른쪽 경우 |면) {사실 반환; } 다른 { 반환 거짓 ; } }' – mbhargav294