python으로 게임만들기(pygame) – 화면 프레임수 설정

###인프런 강의중 나도코딩님의 파이썬 활용편을 참고하여 작성하였습니다.

이번편에서는 화면에 출력되는 프레임수를 설정해보겠습니다.

기본적으로 게이밍 모니터가 아니라면 화면주사율이 모두 60hz로 설정되있을텐데 이건 1초에 모니터가 60번 깜빡인다는 뜻입니다.

마찬가지로 pygame의 프레임도 게임이 실행되는 내내 1초당 화면을 몇번 그려줄건지에 대한 설정입니다.

앞에서 이동속도로 안하고 이동을 절대값 으로 줬었는데 가변적으로 주는 이유는 아래 * dt를 곱하는 이유와 같습니다.

이제 게임화면의 초당 프레임 수를 설정해야하는데 dt 변수로 넣어주겠습니다.
밑에 print는 프레임수가 출력되는지 확인하는 과정이기 때문에 안해도 상관없습니다.

*여기서 dt 만큼 곱하는 이유는 프레임 수에 따라서 속도가 달라지면 안되기 때문입니다.

동영상에서 설명하듯이 기본적으로 프레임스피드가 다르더라도 캐릭터의 이동속도는 똑같아야하기때문에 스피드에 dt 값을 곱해줌으로써 밸런스를 유지시켜 줍니다.

##10 프레임

끊기는 느낌

##60 프레임

부드러운 느낌

풀 코드

import pygame

pygame.init() # 초기화 (반드시 필요)

# 화면 크기 설정
screen_width = 480 # 가로 크기
screen_height = 640 # 세로 크기

screen = pygame.display.set_mode((screen_width, screen_height))

# 화면 타이틀(제목) 설정
pygame.display.set_caption("Dalso Game") #게임 이름

# FPS 초당 프레임 변수 설정
clock = pygame.time.Clock()

# 배경 이미지 불러오기
background = pygame.image.load("C:/python/game/background.png")

# 캐릭터 불러오기
character = pygame.image.load("C:/python/game/character.png")
character_size = character.get_rect().size # 캐릭터의 사이즈 가져오기
character_width = character_size[0] # 캐릭터의 가로 크기
character_height = character_size[1] # 캐릭터의 세로 크기
character_x_position = (screen_width / 2) - (character_width / 2) # 화면 가로에 중간지점에 캐릭터의 가로 위치
character_y_position = screen_height - character_height # 화면 세로 크기 가장 아래에 캐릭터의 세로 위치

# 이동할 좌표
to_x = 0
to_y = 0

# 이동 속도
character_speed = 0.5


#pygame에서는 이벤트 루프가 있어야 창이 꺼지지않음
# 이벤트 루프
running = True # 게임이 진행중인지 확인하기
while running:
    dt = clock.tick(60) # 게임화면의 초당 프레임 수 설정

    print("fps : " + str(clock.get_fps())) #프레임 수 확인

    for event in pygame.event.get(): # running 중 키보드나,마우스 입력값(이벤트)을 체크해주는것
        if event.type == pygame.QUIT: # 창이 닫히는 이벤트가 발생하였는지
            running = False # 게임이 진행중이 아님

        if event.type == pygame.KEYDOWN: #키가 눌러졌는지 확인
            if event.key == pygame.K_LEFT: # 캐릭터를 왼쪽으로
                to_x -= character_speed # -5만큼
            elif event.key == pygame.K_RIGHT: # 캐릭터를 오른쪽으로
                to_x += character_speed
            elif event.key == pygame.K_UP: # 캐릭터를 위로
                to_y -= character_speed
            elif event.key -- pygame.K_DOWN: # 캐릭터를 아래로
                to_y += character_speed

        if event.type == pygame.KEYUP: # 방향키를 떼면 멈춤
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                to_x = 0
            elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                to_y = 0


    #screen.fill((0, 0, 255)) #RGB형식으로 이미지 로드
    screen.blit(background, (0, 0)) # 배경 그리기(background 가 표시되는 위치)

    screen.blit(character, (character_x_position, character_y_position)) # 캐릭터 그리기

    character_x_position += to_x * dt # 캐릭터의 포지션을 x만큼 실제 움직임 프레임수(dt)만큼 곱해서
    character_y_position += to_y * dt # 캐릭터의 포지션을 x만큼 실제 움직임

    # X 경계값 설정
    if character_x_position < 0:
        character_x_position = 0
    elif character_x_position > screen_width - character_width:
        character_x_position = screen_width - character_width
    # Y 경계값 설정
    if character_y_position < 0 :
        character_y_position= 0
    elif character_y_position > screen_height - character_height:
        character_y_position = screen_height - character_height

    pygame.display.update() # 게임화면을 지속적으로 그리기(for 문도는동안 계속)

# pygame 종료
pygame.quit()

 

————————————————–

사이트 리뉴얼중입니다~

서버(Linux, ESXi), NAS(헤놀로지, ESXi 및 IT관련 정보, 기타 등등을 공유하는 커뮤니티 SVRFORUM을 새로 만들었습니다.
많은 가입(?) 부탁드립니다~
https://svrforum.com

이전글들은 모두 상단 메뉴의 Blog 글 모음에있습니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

홈서버 IT 커뮤니티 SVRFORUM
Link