애니메이션 주기
배우기
13 파이썬 - Pygame
애니메이션 주기
움직임을 표현해놓은 이미지를 스프라이트(Sprite)라고 불러요.
클래스를 이용해놓으면 이런 이미지를 또 재사용 할 수도 있으니 괜찮은 방법인 거 같아요.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Sprite(pygame.sprite.Sprite):
    def __init__(self):
        super(Sprite, self).__init__()
        self.images = []
        self.images.append(pygame.image.load("idle_1.png"))
        self.images.append(pygame.image.load("idle_2.png"))
        self.images.append(pygame.image.load("idle_3.png"))
        self.images.append(pygame.image.load("idle_4.png"))

        self.index = 0
        self.image = self.images[self.index]
        self.rect = pygame.Rect(180, 100, 64, 64)

    def update(self):
        self.index += 1
        if self.index >= len(self.images):
            self.index = 0
        self.image = self.images[self.index]
내용을 살펴볼까요?
images라는 리스트 안에 load를 이용해서 사용할 이미지를 저장해놨어요.
pygame의 Rect는 사각형 틀을 만들어 줍니다.
update 함수를 통해서 리스트 안에 어떤 이미지를 보여줄지 정하네요?
Python
clock = pygame.time.Clock()

pygametime은 이름 그대로 우리에게 시간과 관련된 도움을 줍니다. 시계가 필요할지 모르니 일단 준비해놓죠.

Python
1
2
sprite = Sprite()
group = pygame.sprite.Group(sprite)

위에서 정의한 class를 사용하기 위해 변수 sprite 안에 저장한 뒤, Group()을 통해 pygame에게 사용할 스프라이트가 있다고 알려주어야 합니다.

작동되는 속도를 너무 빠르게 하면 캐릭터가 너무 빨리 움직일 수 있어요! 시계를 이용해서 10프레임으로 작동하도록 해봅시다.

Python
clock.tick(10)

작동시켜 볼까요?

Python
import pygame
pygame.init()

window = pygame.display.set_mode((500, 320))
is_end = False

clock = pygame.time.Clock()

class Sprite(pygame.sprite.Sprite):
    def __init__(self):
        super(Sprite, self).__init__()
        self.images = []
        self.images.append(pygame.image.load("idle_1.png"))
        self.images.append(pygame.image.load("idle_2.png"))
        self.images.append(pygame.image.load("idle_3.png"))
        self.images.append(pygame.image.load("idle_4.png"))

        self.index = 0
        self.image = self.images[self.index]
        self.rect = pygame.Rect(180, 100, 64, 64)

    def update(self):
        self.index += 1
        if self.index >= len(self.images):
            self.index = 0
        self.image = self.images[self.index]

sprite = Sprite()
group = pygame.sprite.Group(sprite)

while not is_end :
    for event in pygame.event.get() :
        if event.type == pygame.QUIT :
            is_end = True

    window.fill((255, 255, 255))
    group.update()
    group.draw(window)
    pygame.display.update()
    clock.tick(10)

pygame.quit()
quit()
질문하기
추가 자료
no files uploaded

추가 자료가 없습니다

여기서 새로운 학습 자료를 확인하세요!
선생님이 추가한 자료들을 바로 확인할 수 있어요.