2012-12-15 2 views
-3

매우 간단한 2D 게임에서 작업 해왔다. 매우 기본적이고, init 클래스와 같은 메소드를 가진 Play 클래스가 있고, 그 안에 렌더링과 업데이트가있다. 2D 맵을 만든다. 키보드 입력이있을 때 움직이는 플레이어, 이것은 단지 If 문을 사용하여 매우 간단하게 수행됩니다. 게임 종류에는 위, 아래, 왼쪽 및 오른쪽으로 이동할 수있는 포켓몬 뷰 (오버 헤드 뷰)가 있습니다. 내지도에는 장애물이 있으며 게임을 할 때 플레이어가 장애물을 걷는 순간 장애물에 도달했을 때 플레이어가 멈추고 걷지 못하게하여 충돌 감지를 조사하고 관리합니다자바 2D 게임 사각형 충돌 공명

Rectangle rectOne = new Rectangle(buckyPositionX, buckyPositionY, 40, 40); 
Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

또한 두 사각형이 교차하는 경우 true를 반환 변수 x에 대한 부울 만든 :이 작업을 수행 한 후

boolean x = rectOne.intersects(rectTwo); 

을 시작를 만들기 위해, 내 코드에서 나는이 직사각형을 만들었습니다 나는 지금 자바에게 정확하게 말하는 법에 대해 혼란 스럽다. 부울이 참을 반환한다면 그 사각형을 통과하지 못하게한다. 나는 그것이 if 상태라는 것을 안다. ment는 x가 true를 반환하는지 검색하지만 내부에 무엇을 넣을 지 모릅니다. 경험이 많은 사용자 중 일부가이 문제를 해결하는 데 도움이되기를 바랍니다.

+1

감안할 때 단어의 회전이 더 포함되어 있지 않습니다 FF '찾기'에 따르면 묻습니다. 질문이 있습니까? 그렇다면 무엇입니까? v 'Ben Dover'가 본명 인 경우, 'Benjamin Dover'로 ID를 변경하는 것이 좋습니다. 그렇지 않은 경우 ID로 피곤한 농담으로 문자를 사용하지 말고 자라십시오. –

+0

내 이름은 실제로 벤이지만 내 친구가 내 성을 도버에게 실제로 설정 한 순간부터이 야후 계정을 오랫동안 사용해 왔으며이 포럼에 들어올 때만 전체 이름이 나타납니다. 미안합니다. 그것에 대해. –

+0

여러 질문에 관해서, 저는 Java에 익숙하지 않습니다. 그리고 제가하는 일을 전혀 모르는 상태에서 첫 번째 질문이 매우 모호했습니다. 사람들이 내가 묻는 내용과 스레드가 시작된 것을 정확히 이해하지 못했을 때 더욱 혼란스러워졌습니다. 주제에 관해서는, 나는 천천히 다른 유형의 충돌을 사용할 수 있다는 것을 배웠고, 궁극적으로 사각형 충돌에 대한 기본 지식을 알게되었다. 자바에 관해 더 많이 배웠다. 나는 새로운 질문을하는 것이 일하는 것보다 낫다고 생각했다. 물건이 주제에서 벗어나고 있었던 오래되었던 것와 더불어. –

답변

1

제 생각에는 충돌이 있는지 확인하고 buckyPositionXbuckyPositionY을 업데이트하는 방법 changeBuckyPos을 작성하는 것이 좋습니다.

public void changeBuckyPos(float deltaX, float deltaY) { 
    float newX = buckyPositionX + deltaX; 
    float newY = buckyPositionY + deltaY; 

    // check for collisions 
    Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40); 
    Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

    if (!rectOne.intersects(rectTwo)) { 
    buckyPositionX = newX;   
    buckyPositionY = newY;   
    } 
} 

도 좀 더 명확하게하기 위해 현재 코드에있는 모든 키 이벤트 핸들러,이 같은 것을 사용할 수 있습니다 : '?'

public void changeBuckyPos(float deltaX, float deltaY) { 
    float newX = buckyPositionX + deltaX; 
    float newY = buckyPositionY + deltaY; 

    // check for collisions 
    Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40); 
    Rectangle rectTwo = new Rectangle(-100, -143, 70,70); 

    if (!rectOne.intersects(rectTwo)) { 
    // check global limits 
    if ((newX > -1000) && (newX < 1000) && (newY > -1000) && (newY < 1000)) { 
     buckyPositionX = newX; 
     buckyPositionY = newY; 
    } 
    } 
} 
+0

코드를 이용해 주셔서 감사합니다. 처음에 게시 한 코드를 사용하고 있습니다. 간단하게 보입니다. 업데이트 방법을 적용하고 mu buckyPositionX와 Y를 변경하여 대부분의 오류를 해결했지만 지금은 rectOne (float, float, int, int) 생성자가 정의되어 있지 않고 다음 오류가 changeBuckyPos라고 말하는 rectOne 아래에 2 개의 오류가 더 있습니다. void는 changeBuckyPos 값에 대해 유효하지 않은 유형이라고합니다. 이 오류를 수정하도록 도와주세요. 고맙습니다. –

+0

fhe Rectangle 오류를 수정하는 코드를 수정했습니다. 변수는 'int'로 캐스트되어야합니다. – schnaader

+0

고마워요, 지금은 모든 오류를 고쳤습니다.하지만 충돌로 인해 문제가 발생했습니다. 게임에서 아무런 변화가 없으면, 코드가 플레이어가 내 집을 통과하지 못하게 할 것이라고 생각했습니다. 그것들을 좌표로 나타내는지도. –