본문 바로가기
개발 일지

파이게임으로 RPG 만들기 #01. 스프라이트 시트

by PrintedLove 2021. 3. 22.

안녕하세요! Printed 입니다.

저번에 예고했던 대로, 간단한 사이드 프로젝트로 돌아왔습니다.

 

요즘 하는 일이 바빠, 이런 작은 프로젝트로 포스팅 해야되는게 좋으면서도 안타깝네요 ㅠㅜ

팀 프로젝트가 끝나면, 팀원들의 허락을 받아 작게 소개하는 형식으로라도 포스팅 해보도록 하겠습니다!

 

 

 

구현된 기능은 간단합니다.

위 사진처럼 여러 이미지가 합쳐진 스프라이트 시트에서, 필요한 이미지를 추출해 4배율 해서 화면에 드로우.

파이게임의 기존적인 틀에 SpriteSheet클래스를 만들어 구현했습니다.

 

game.py 코드

# [Python pygame Game] RPG tutorial
# made by "PrintedLove"
# https://printed.tistory.com/
# https://www.youtube.com/channel/UCtKTjiof6Mwa_4ffHDYyCbQ/
#-*-coding: utf-8

import pygame, sys
from datafile import *

clock = pygame.time.Clock()

from pygame.locals import *
pygame.init()

WINDOW_SIZE = (640, 480)
screen = pygame.display.set_mode(WINDOW_SIZE, 0, 32)    #set window size
pygame.display.set_caption('RPG tutorial')              #set window name

spr_character = SpriteSheet('spriteSheet1.png', 16, 16, 8, 8, 11)   #load Sprite Sheets

while True:     # game loop
    screen.blit(spr_character.spr[0], (320, 240))

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    clock.tick(60)

 

datafile.py 코드

#-*-coding: utf-8

import pygame, os

DIR_PATH = os.path.dirname(__file__)
DIR_IMAGE = os.path.join(DIR_PATH, 'image')
DIR_SOUND = os.path.join(DIR_PATH, 'sound')

class SpriteSheet:
    def __init__(self, filename, width, height, max_row, max_col, max_index):
        baseImage = pygame.image.load(os.path.join(DIR_IMAGE, filename)).convert()
        self.spr = []

        for i in range(max_index):
            image = pygame.Surface((width, height))
            image.blit(baseImage, (0, 0), 
                       ((i % width) * width, (i / max_row) * height, width, height))
            image_scaled = pygame.transform.scale(image, (width * 4, height * 4))
            self.spr.append(image_scaled)

 

game.py 코드는 파이게임의 핵심 부분으로, 이곳에서 게임의 메인 루프가 실행됩니다. 파이게임을 조금이라도 만져보신 분들이라면 누구나 알법한 기초적인 소스들에 이미지 파일을 스프라이트 시트에서 받아오기 위한 코드가 추가되었습니다.

datafile.py는 게임에 필요한 리소스들을 관리하는 코드입니다. 후에, 폰트와 사운드 등 다른 리소스들도 이곳에서 처리할 생각입니다. 현재까지는 SpriteSheet 클래스로 도트 이미지를 불러와 4배로 뻥튀기 해주는 기능만 수행합니다.

 

 

 

구동 영상입니다!

하지만 꼴랑 이미지 한장 띄우는 기능밖에 없어 아직 게임이라 하기에도 민망한 수준이네요...

 

그래서 다음 일지에서는 사용자의 입력을 받아 캐릭터를 움직이는 기능을 구현해 보도록 하겠습니다!

 

 

깃허브에서 소스코드를 확인하실 수 있습니다!

 

PrintedLove/Python-pygame-RPG-tutorial

파이게임 라이브러리로 만드는 RPG 프로젝트. 블로그에서 개발일지를 확인하실 수 있습니다. - PrintedLove/Python-pygame-RPG-tutorial

github.com

 

댓글