Menu
CoddyTech

원본에서 회전하기

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보다 커지지 않고, 한 번 회전한 것보다 더 흐려지지도 않습니다. 모든 변환에도 같은 규칙이 적용됩니다. 직전 복사본이 아니라 원본을 기준으로 작업하세요.

challenge icon

챌린지

중급
  1. 루프 전에 angle = 0으로 설정합니다.
  2. 매 프레임마다 angle에 2를 더합니다.
  3. 원본 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()
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

스프라이트와 이미지의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드