2014-10-06 3 views
0

저는 libGdx로 게임을하고있어 간단한 플랫폼 게임을 만듭니다. Tiled를 사용하여지도와 LibGdx tiledMap 렌더러를 만듭니다. SuperKoalio libgdx 예제와 비슷한 설정입니다.LibGdx 입력 처리 및 충돌 감지

순간적으로 내 충돌 감지. 플레이어가 오른쪽 위 또는 아래에있는 타일을 터치했는지 여부 만 판단합니다. 오른쪽으로 충돌을 감지하면 플레이어 상태를 서게 설정합니다. 플레이어의 제어는 InputHandler를 통해 수행됩니다. D 키를 누르면 플레이어 상태가 걷기로 설정되고 키를 놓으면 상태가 서있게됩니다.

내 문제는 내가 D를 누르고 있으면 플레이어가 내려와 계속 움직일 수있을 때까지 플랫폼을 점프하고 멈춰서 멈추지 않는다는 것입니다. D 키를 놓고 다시 누릅니다. 나는 뛰어 내릴 수는 있지만 걷지는 못한다.

이유에 대한 아이디어와 해결 방법에 대한 의견이 있으십니까? 나는 너무 오랫동안 그것을 꼼짝 않고 바라보고 있었기 때문에 내가 눈에 띄는 무엇인가를 놓칠지도 모릅니다.

플레이어의 이동을 시작하기 위해 player.update 함수의 시작 부분에있는 코드입니다.

if(state == State.Standing) { 
     velocity.x = 0; 
    } else if(state == State.Walking || state == State.Jumping) { 
     velocity.x = MAX_VELOCITY; 
    } 

그리고 이것은 충돌 부호의 추출물이다 : 0

for (Rectangle tile : tiles) { 
     if (playerRect.overlaps(tile)) {     
      state = State.Standing; 
      break; 
     } 
    } 

원래, 충돌 응답 설정 (X)의 속도 및 속도는 여전히 동일하게 생성 된 상태를 결정하는 데 사용되었다 문제.

주셔서 감사합니다 Collision-detection으로

+0

충돌 감지는 스스로 해결해야하는 고통입니다. 나는 그가 어떤 타일과도 교차하는 경우 플레이어 상태를 서 있기 위해 설정하는 대신에 더 적절하게 충돌을 처리해야한다고 생각합니다. 그가 서 있는지 여부를 결정하기 전에 그가 어떻게 타일과 충돌하고 있는지 확인해야합니다. – Barodapride

+0

감사합니다. 나는 선수 상태에서 무엇을하고 있었는지 살펴 보았고 점프를 열거 형 밖으로 옮겼습니다. 동시에 공중에서 움직이고 오른쪽으로 움직일 수 있기 때문에 점프하고 풀 수있는 것 같습니다. 아직 작동하는 이유를 완전히 이해할 수 있을지 모르겠지만 효과가 있으며 이것이 중요한 이유입니다. D – Cerberus90

답변

0

는 allready 변경할 필요가있는 것은 충돌 처리하고, 노력하고 있습니다.
Standing으로 설정하십시오.
대신이 일을 당신은 깃발 collision를 설정 culd과 update 검사에서이 플래그 :

if(state == State.Standing || collision) { 
    velocity.x = 0; 
} else if(state == State.Walking || state == State.Jumping) { 
    velocity.x = MAX_VELOCITY; 
} 

당신이 이동하지 않는 경우에 당신이 알다시피,이 방법을 수행 할 수 없습니다 (collision==true) 또는 경우 돈 becuase (state != State.Standing)
더 이상 충돌하지 않을 때 알아야합니다.
velocity을 설정 한 후 collision 플래그를 재설정하고 다음 프레임을 다시 계산할 수 있습니다.