2013-03-17 4 views
0

현재 사용중인 컬렉션 감지 방법은 충돌을 해석 할 수 있지만 방향에 따라 이상한 효과가 발생합니다. 그것은 :Slick2D 충돌 감지 - 이상한 움직임

  • 플레이어가 개체의 오른쪽을 때리면 항상 작동합니다.
  • 플레이어가 개체의 위쪽이나 아래쪽에있을 경우 플레이어를 옆으로 밉니다.
  • 플레이어가 개체의 왼쪽에 닿았을 때 처음으로 작업하지만 다음에 왼쪽에서 충돌이 감지 될 때 플레이어를 개체의 반대쪽으로 텔레포트합니다.

이 현재 충돌 감지 코드 :

if(player.playerBounds.intersects(portal.bounds)&&player.isMovingLeft){ 
     player.playerX=(portal.x+portal.width); 
     player.playerX++; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingRight){ 
     player.playerX=(portal.x-player.width); 
     player.playerX--; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingUp){ 
     player.playerY=(portal.y+portal.height); 
     player.playerY--; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingDown){ 
     player.playerY=(portal.y+player.height); 
     player.playerY++; 
    } 

답변

0

는 다음과 같은 코드를 시도하고 작동하는지 볼 수 있을까요?

bool collide = player.playerBounds.intersects(portal.bounds); 

if(collide && player.isMovingLeft){ 
    player.playerX = (portal.x + portal.width) + 1; 
} 
else if(collide && player.isMovingRight){ 
    player.playerX = (portal.x - player.width) - 1; 
} 
else if(collide && player.isMovingUp){ 
    player.playerY = (portal.y + portal.height) + 1; 
} 
else if(collide && player.isMovingDown){ 
    player.playerY = (portal.y + player.height) - 1; 
} 

가능한 이유가 될 수있다 :

  • 충돌 여러 번 확인.
  • 플레이어를 움직이면 이동 방향이 바뀝니다.
  • 일부 다른 코드가이 코드와 충돌합니다.
  • isMovingX가 올바르게 작동하지 않습니다.
+0

실행되지만 원래 코드와 동일한 효과를냅니다. – oracleCreeper

0

여기에 내 질문에 대한 답변을 얻으려고합니다. 이동 방향에 대한 플래그는 문제의 근원 인 참에서 변경되지 않았습니다. 한 방향은 평소대로 움직이는 첫 번째 방향과 나란히 있기 때문에 정상이었습니다.