사각형 충돌은 불공평해
Coddy Pygame 여정의 스프라이트와 이미지 섹션에 포함된 레슨. 36개 중 21번째.
화살표 키를 눌러 배를 가시 공 쪽으로 조종하세요. Rect 충돌 검사인 colliderect는 빠르고 간단하지만, 둥근 공에서는 정확하지 않습니다. 공의 Rect는 공을 둘러싼 사각형이라 모서리가 모두 비어 있고, 배의 Rect도 선수 옆에 빈 공간이 있습니다.
검사 결과를 눈으로 확인할 수 있게 하세요. 공의 Rect 윤곽선을 그리고, colliderect의 결과에 따라 윤곽선 색을 바꾸세요.
if ship_rect.colliderect(ball_rect):
colour = (230, 60, 60)
else:
colour = (90, 90, 120)
pygame.draw.rect(screen, colour, ball_rect, 2)그런 다음 오른쪽 아래쪽에서 공을 향해 다가가 보세요. 배와 가시 사이에 하늘이 뚜렷하게 보이는 틈이 있는데도 윤곽선이 빨간색으로 바뀝니다. 두 Rect의 모서리는 서로 겹치지만, 그림은 겹치지 않습니다. 게임에서는 이런 식으로 억울하게 목숨을 잃게 되고, 플레이어는 그 점을 알아차립니다.
다음 수업에서는 그림 자체를 검사합니다.
챌린지
쉬움공과 우주선을 그린 다음, ball_rect의 윤곽선을 두께 2픽셀로 그리세요. ship_rect가 공과 충돌하는 동안에는 빨간색 (230, 60, 60)으로, 그렇지 않을 때는 회색 (90, 90, 120)으로 표시하세요. 그런 다음 오른쪽 아래에서 우주선을 움직여 들어오게 하고 모서리를 살펴보세요.
직접 해보기
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Near Miss")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(topleft=(420, 320))
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
ball_rect = ball.get_rect(center=(320, 240))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
ship_rect.x -= 4
if keys[pygame.K_RIGHT]:
ship_rect.x += 4
if keys[pygame.K_UP]:
ship_rect.y -= 4
if keys[pygame.K_DOWN]:
ship_rect.y += 4
screen.fill((20, 22, 40))
screen.blit(ball, ball_rect)
screen.blit(ship, ship_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
스프라이트와 이미지의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드