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

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

Pygame - python GUI module

오브젝트의 충돌 감지

페이지정보

글쓴이 관리자 조회 27,873 조회 날짜 20-03-05 14:01 / Update: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)

 

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

댓글목록 sfs

총 22 건 , 1 페이지
게시물 검색
Pygame - python GUI module 목록
번호 제목 글쓴이 조회 날짜
1 관리자 53653 02-21
2 관리자 29792 02-21
3 관리자 37159 02-21
4 관리자 40449 02-22
5 관리자 44507 02-22
6 관리자 39322 02-22
7 관리자 33668 02-22
8 관리자 34406 02-22
9 관리자 35461 02-23
10 관리자 41204 02-24
11 관리자 30088 02-25
12 관리자 33435 02-27
열람중 관리자 27874 03-05
14 관리자 34154 03-10
15 관리자 22051 03-10
16 관리자 27223 03-11
17 관리자 21064 03-11
18 관리자 23971 03-11
19 관리자 26378 03-11
20 관리자 28345 03-11
21 관리자 29742 04-05
22 관리자 23465 04-05
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.