원본에서 회전하기
Coddy Pygame 여정의 스프라이트와 이미지 섹션에 포함된 레슨. 36개 중 9번째.
항상 회전하는 스파이크 공은 매 프레임 조금씩 돌아갑니다. 이렇게 작성하고 싶은 유혹이 들지만, 문제가 생깁니다:
ball = pygame.transform.rotate(ball, 2) # 잘못됨매 프레임마다 직전에 회전한 그림을 다시 회전합니다. 회전할 때마다 투명한 테두리가 추가되어 Surface가 프레임마다 약 3 percent씩 커집니다. 0.5초 후에는 크기가 두 배가 되고, 2초 후에는 폭이 거의 1,800 pixels에 달합니다. 회전할 때마다 픽셀도 조금씩 더 번집니다. 게임은 곧 몹시 느려집니다.
원본과 각도를 따로 보관하고, 매 프레임 원본에서 회전한 그림을 만드세요:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))이제 spun은 각도가 얼마든 파일에서 한 번만 회전한 결과입니다. 크기는 절대 67 by 67 pixels보다 커지지 않고, 한 번 회전한 것보다 더 흐려지지도 않습니다. 모든 변환에도 같은 규칙이 적용됩니다. 직전 복사본이 아니라 원본을 기준으로 작업하세요.
챌린지
중급- 루프 전에
angle = 0으로 설정합니다. - 매 프레임마다
angle에 2를 더합니다. - 원본
ball을angle만큼 회전하고, 회전한 결과의 중심이(320, 240)에 오도록 그립니다.ball자체는 절대 변경하지 않습니다.
직접 해보기
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Spinning Spikes")
clock = pygame.time.Clock()
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ball, ball.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
스프라이트와 이미지의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드