▣ 이번장에서는 pygame에 이미지를 서로 충돌하는 코드를 작성하도록 하겠습니다.
방법이 많이 있습니다.
밑에 있는 pygame메뉴얼을 참고해주시고, 저는 간단한 방법 몇가지만 공부해보도록 하겠습니다.
https://www.pygame.org/docs/ref/sprite.html
▣ 우선 먼저 플레이어와 아이템을 화면에 배치해주세요.
그리고 플레이어를 방향키로 움직이게 코드를 진행해주세요.
혹시 모르시는 분은 파이썬 pygame 챕터를 참고하셔서 코드를 진행해주세요.
여기서 중요한건 is_itemCrach 상태에 대한 변수를 만들어주었습니다.
이걸 통해 플레이어와 아이템이 충돌할지에 대한 상태를 설정해줄겁니다.
▣ 그리고 while True: 부분에서 if is_itemCrach == False: 닿지 않았을 경우에만 item 이미지를 그리게
코드를 작성해주세요.
그럼 is_itemCrach = True가 되면 아이템을 그리지 않기 때문에 우리가 아이템을 획득한 효과를 만들 수 있습니다.
▣ 그럼 우선 이렇게 아이템과 캐릭터가 잘 그려지는걸 확인할 수 있습니다.
아이템에 위치는 여러분들이 원하는 위치에 넣어주세요.
▣ 그리고 item_posX - player_posX 에 값을 빼주세요.
그럼 두 포지션에 대한 거리가 나오게 됩니다.
서로에 크기도 생각하셔서 print함수로 값을 확인하신 후에 조건문을 만들어주세요.
저는 or 논리연산자로 둘중에 하나라도 가까워지면 True로 하게 했습니다.
▣ 그리고 캐릭터가 움직이는 코드에서 screen.fill((0,0,0)) 검은색으로 채우게 해주었습니다.
그리고 확인해보면
▣ 이렇게 아이템에 닿이면 is_item 상태가 True가 되고 더 이상 그리지 않고 검은색으로 채워지기 때문에
사라지는걸 볼 수 있습니다.
그런데 좌표로 하게 되면 조금 한개가 있습니다.
그렇기 때문에 pygame에서는 sprite에 collide로 충돌을 감지는 코드를 지원합니다.
▣ 우선 클래스로 플레이어와 아이템을 스프라이트로 만들어주고 그려줘야 합니다.
class Player(pygame.sprite.Sprite):로 선언해주세요.
def __init__(self)로 클래스를 초기화합니다. 이건 클래스를 선언해서 사용하면 바로 실행되는 함수라고 생각하시면 됩니다.
pygame.sprite.Sprite.__init__(self) 스프라이트를 초기화해주시고,
self로 클래스에 멤버를 선언해줍니다. pygame.image.load() 로 이미지를 불러오고 pygame.transform.scale() 함수로
이미지에 크기를 지정해줍니다.
그리고 여기서 부터가 중요한데 self.rect = self.image.get_rect()값으로 스프라이트를 그려줍니다.
그리고 rect.centerx 이미지에 중심에 값을 지정해줍니다.
중심에 값은 이미지를 기준으로 좌표를 지정하신다고 생각하시면 됩니다.
이걸 해주지 않으면 collide()함수로 사용할 수 없습니다.
▣ 그리고 item, player에 클래스를 정의해줍니다.
그럼 item, player이름에 아까 클래스를 선언했던 걸 메모리에 인스턴스화 시키는 겁니다.
변수이름으로 사용할 수 있다라는 이야기입니다.
▣ 그리고 if pygame.sprite.collide_rect(player, item) 으로 충돌을 감지합니다. collde_rect()함수는 이미지스프라이트에 네모 영역으로 충돌을 체크합니다. 그리고 충돌을 하게 되면 값을 반환합니다.
▣ collide_circle(player,item) 이건 원의 영역으로 충돌을 체크하여 반환합니다.
둘다 한번씩 사용해서 확인하면 충돌이 잘되는걸 확인할 수 있습니다.
▣ 이거 외에 다른 여러 충돌 방법들이 있습니다.
https://www.pygame.org/docs/ref/sprite.html
https://www.youtube.com/watch?v=Dspz3kaTKUg&t=595s
▣ 위에 있는 자료들을 참고하시면서 다른 방법으로 충돌하는 방법을 익혀보세요.
'[ Python ] > - 파이썬 실습연습' 카테고리의 다른 글
python - [랜덤, Random] (2) | 2021.07.25 |
---|---|
파이썬 - [웹 클로링_1, 간단한 정보수집] (2) | 2021.06.03 |
파이썬 - [이미지 애니메이션] (0) | 2021.05.20 |
파이썬 - [pygame, 마우스입력, 마우스좌표, event] (0) | 2021.05.15 |
파이썬 - [pygame, 도형그리기, draw] (0) | 2021.05.14 |
댓글