###인프런 강의중 나도코딩님의 파이썬 활용편을 참고하여 작성하였습니다.
이번편에서는 화면에 출력되는 프레임수를 설정해보겠습니다.
기본적으로 게이밍 모니터가 아니라면 화면주사율이 모두 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()