Python/pygame

파이썬으로 게임 만들기(Pygame) - 4. 이미지 로딩 및 표시하기

wtc 2024. 6. 10. 17:24

이미지 넣기

제일 먼저 이미지가 필요하다.
적당히 아무 이미지나 구해서 가상 환경 폴더에 img 폴더를 만든 다음 이미지를 넣자
 

import pygame, sys

size = (800, 600)
pd = pygame.display

screen = pd.set_mode(size)

pd.set_caption("모험")

white = (255, 255, 255)
black = (0, 0, 0)

screen.fill(white)
pd.flip()

running = True

image = pygame.image.load('img\char.jpg')
# 구한 이미지를 로드함

imagecount = 0
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                if imagecount == 0:
                    screen.blit(image, (300,200))
                    #image 이미지를 300,200 위치에 불러옴
                    pd.flip()
                    imagecount = 1
                else:
                    screen.fill(white)
                    pd.flip()
                    imagecount = 0

pygame.quit()
sys.exit()

 

pygame.image.load() 함수로 이미지를 불러올 수 있게 되었다.
이 이미지를 띄우려면 blit(불러온 이미지, (이미지 위치))로 띄울 수 있다.
 

스프라이트 시트

스프라이트 시트는 하나의 이미지 파일에 여러 개의 작은 이미지(스프라이트)들이 포함된 것이다.
이렇게 하게되면 한 번의 로드로 여러 이미지를 사용할 수 있는 장점이 있다.
이미지의 좌표를 이용해서 스프라이트를 불러올 수 있다.
 

 
좋지 않은 그림 실력으로 3x3 스프라이트 시트를 만들어봤다.
이제 이 스프라이트 시트 하나를 로드해 pygame에서 써볼 것이다.
 

import pygame, sys

pygame.init()

size = (800, 600)

pd = pygame.display

screen = pd.set_mode(size)
pd.set_caption("sprite sheet")

white = (255,255,255)
black = (0,0,0)

screen.fill(white)
pd.flip()

spsh = pygame.image.load('img\spritesheet.jpg')

sp1 = spsh.subsurface((0,0,32,32))
sp2 = spsh.subsurface((32,0,32,32))
sp3 = spsh.subsurface((64,0,32,32))

sp4 = spsh.subsurface((0,32,32,32))
sp5 = spsh.subsurface((32,32,32,32))
sp6 = spsh.subsurface((32,64,32,32))

sp7 = spsh.subsurface((0,64,32,32))
sp8 = spsh.subsurface((64,32,32,32))
sp9 = spsh.subsurface((64,64,32,32))

screen.blit(sp2, (0,550))
pd.flip()

running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

pygame.quit()
sys.exit()

 

pygame.image.load로 스프라이트 시트를 불러오고, subsurface 함수로 스프라이트 시트에서 추출할 이미지 좌표를 선택해 추출할 수 있다.

 
subsurface의 튜플로 전달될 인자는 (x축, y축, width, height)로 사용한다.