오브젝트의 충돌 감지 > Pygame - python GUI module

본문 바로가기

사이트 내 전체검색

이전으로Pygame - python GUI module

오브젝트의 충돌 감지

페이지정보

글쓴이 관리자 조회 31,676 조회 날짜 20-03-05 14:01 / U:20-03-07 01:38
댓글 0댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

내용

오브젝트의 충돌 감지

 

 

게임에서 두 개의 오브젝트가 충돌되는 것을 체크하는 것은 매우 많이 쓰이는 작업이다.

 

화면상의 오브젝트는 모두 자신의 좌표를 가지고 있다. 중심좌표를 제공하는 모듈이라면 중심좌표와 중심좌표의 거리를 구하여 두 오브젝트의 충돌을 감지할 수 있다.

두 개의 점과 점 사이의 거리를 구하여 오브젝트의 충돌을 감지하는 예제는 아래의 강좌를 통해 확인한다.

두 점과 점 사이의 거리 구하기 : https://www.jbmpa.com/python_tip/10

터틀 모듈로 게임 만들기 : https://www.jbmpa.com/turtle/6

 

pygame에서는 모든 오브젝트는 Surface 객체이며 이미지로 대변할 수 있다. 그리고 이 이미지는 사각형 안에 들어가 있고, 이는 곧 Rect()의 좌표를 가지게 된다.

참고 : https://www.jbmpa.com/pygame/4

 

따라서 중심점과 중심점의 거리를 구하는 공식을 대비해도 되고, 각 x, y 좌표의 범위가 서로 겹쳐지는 것을 감지하는 방법을 사용해도 된다.

 

아래의 그림을 통해 확인해보자.

 

1) 서로 겹치지 않는 Rect()들

2226294186_1583441004.8448.png

 

 

2) 서로 겹치는 Rect()들

2226294186_1583440940.9058.png

 

 

 

Rect()들은 가상의 속성으로 top, right, bottom, left를 가진다. 각각의 값은 x, y 좌표에서 width와 height를 계산해준 결과이다.

top : y

right: x + width

bottom : y + height

left : x

 

1)번 같은 경우 A와 B는 y값의 범위는 겹치지만, x값의 범위는 서로 겹치지 않는다.

2)번 같은 경우 A와 B는 y값의 범위와 x값의 범위 모두 겹친다.

 

2)번 같이 x와  y의 범위가 모두 겹치는 경우를 판단하려면 아래와 같이 하면 된다.

 

y 값에 대한 판단

- A의 top이 B의 bottom보다 작다.

- B의 top이 A의 bottom보다 작다.

 

x 값에 대한 판단

- A의 left가 B의 right보다 작다

- B의 left가 A의 right보다 작다.

 

위 4개의 조건이 모두 동시에 만족해야 두 오브젝트가 겹치는 것 또는 만나는 것이 된다.

 

따라서 아래와 같이 코드를 작성하면 된다.

def collision_check(A, B):

    if A.top < B.bottom and B.top < A.bottom and A.left < B.right and B.left < A.right:

        return True

    else:

        return False

 

 

A_rect = A_object.get_rect()

B_rect  = B_object.get_rect()

 

collision_check(A_rect, B_rect)

 

위의 코드로 충돌을 판단하여 다양한 곳에 응용할 수 있다.

댓글목록

댓글이 없습니다

게시물 검색
총 22 건 , 1 페이지
올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구
Copyright © JBMPA.com All rights reserved.
사이트 언어 선택
PC 보기