2014-12-10 2 views
2

저는 게임에서 일해 왔습니다. 지금까지 가장 큰 문제는 플레이어가 필드의 어떤 오브젝트와도 충돌하지 못하는 것입니다. 대신 그들은 나무를 바로지나갑니다. 아무도 그 이유를 말할 수 있습니까?파이 게임에서 스프라이트가 오브젝트를 통과하지 못하게하려면 어떻게해야합니까?

   for tree in treelist: 
 

 
    
 
        if self.player.rect.x == tree.rect.x: 
 
         self.player.rect.x == self.player.rect.x - 2 
 
        if self.player.rect.x == tree.rect.x + tree.rect.width: 
 
         self.player.rect.x == self.player.rect.x + 2 
 
         
 
        if self.player.rect.y == tree.rect.y: 
 
         self.player.rect.y == self.player.rect.y - 2 
 
        if self.player.rect.y == tree.rect.y + tree.rect.height: 
 
         self.player.rect.y == self.player.rect.y + 2

이 이론이 소리인가, 아니면 내가 모든 잘못 그것에 대해려고하고있다 : 저는 여기에 충돌 감지에 사용하려고 코드는?

답변

2

거의 확실한 이론. player 직사각형 위치가 tree 직사각형 위치의 경계와 정확히 일치하는지 여부 만 확인합니다. 그럴 가능성은 거의 없습니다.

# check if player is overlapping the tree 
if tree.rect.x <= self.player.rect.x <= tree.rect.x + tree.rect.width: 
    # decide on how to move player away from the tree depending on previous frame 
    # if player is moving forward, send them backwards from tree 
    if self.player.rect.prev_x < self.player.rect.x: 
     self.player.rect.x -= 2 
    # otherwise send them forwards from tree 
    else: 
     self.player.rect.x += 2 

중복 검사 및 중복 경우 반응의 정확한 논리는 완전히 당신에게 달려 있지만, 이런 종류의 물건 : 당신은 더 같이, 플레이어뿐만 아니라 나무의 경계 사이에 존재를 확인하기 위해 필요 작동해야합니다. 이전 프레임에서 플레이어의 위치를 ​​추적해야합니다. 그렇지 않으면 트리에서 어느 방향으로 향했는지 알 수 없습니다. 이렇게하실 수 있습니다 :

self.player.rect.prev_x = self.player.rect.x 
self.player.rect.x += player_velocity 
3

파이 게임을 사용하고 있습니까? 그렇다면 colliderect 함수 (문서 here)가 내장되어 있습니다.

그렇지 않은 경우 : 상대적으로 염두에두고 플랫폼 게임 설계 깊이 토론에서

  • Here's가.
  • This
  • 정렬 축에 딱 베어 본 2 차원 충돌 감지입니다 (회전하지 예) 그들은 "과거"이동

는, 충돌 감지가 매우 어렵게 만들 수 있습니다 매우 빠르게 움직이는 물체 명심의 사각형 한 프레임의 범위 내에있는 객체! 이 문제를 해결할 수있는 고급 기술이 있지만 지금은 충돌 상자를 상대적으로 크게 만들려고하고 상황은 상대적으로 느리게 움직입니다.

편집 : 죄송합니다. 내 첫 문장이 무례합니다. 나는이 포스트의 제목이 무엇인지 잊어 버렸습니다 ...

+0

Thank you! 우리가 collidedetect를 사용하려고 할 때 우리가 가진 주된 문제는 플레이어가 적절하게 대응할 수있는 켄트를 제공한다는 것이 었습니다. 게임이 정상적으로 내려 가기 때문에 우리는 플레이어가 정확하게 뒤로 움직일 수 없습니다. –

+0

뒤로 이동 = 화면에서 아래로 이동 하시겠습니까? 아니면 충돌 후 이동? – nchen24

+0

그것은 톱 다운 게임입니다. 플레이어가 나무에 뛰어 들어 언제든지 나무를 통과합니다. 우리는 충돌을 감지 할 수 있었지만 우리가 할 때 우리는 나무에서 플레이어가 '되돌아 오게'할 수있었습니다. –