2. 게임 루프와 프레임

 

 

게임 루프와 프레임

 

 

이전 강좌에서 pygame을 이용한 윈도우(스크린) 생성을 해보았다.

참고 : https://www.jbmpa.com/pygame/1

 

게임은 항상 실행되고 있어야 하므로, 내부에 게임 루프를 위한 코드를 작성한다.

 

 

 

1. 게임 루프

 

게임은 화면을 재생산하고, 사용자의 이벤트를 기다려야 하므로 항상 동작하고 있어야 한다. 

 

게임 루프는 while문을 이용한다.

 

 

playing = True

 

while playing:

 

    ''' 코드 '''

 

 

 

2. 프레임 설정하기

 

우리가 즐겨보는 애니메이션의 동작 원리는 여러 장의 그림을 빠르게 교체하여 눈의 착시효과를 이용하여 움직이는 것처럼 보이게 한다. 

이 한장의 그림을 프레임이라고 하며, 1초에 몇 장의 그림을 교체하는가 즉, 몇 프레임을 교체하는가에 따라 애니메이션의 동작의 자연스러움이 결정된다.

1초에 10장의 그림이 교체되는 애니메이션과 100장의 그림이 교체되는 애니메이션이 있다면 당연히 1초에 100장이 교체되는 애니메이션이 훨씬 동작 연결이 부드러울 것이다.

 

pygame에서 이미지를 나타내는 객체를 surface라 표현하는데, 전체 화면이건 하나의 작은 이미지건 모두 surface 객체를 통해 구현된다.

요약하면, pygame은 애니메이션의 원리처럼 surface가 끊임없이 생성되어 이전의 스크린을 덮어쓰며 화면을 보여준다.

 

이와 같은 방식으로 프로그램이 실행되면,  while 루프문 안에서 많은 코드들이 반복 실행되는 시간이 컴퓨터의 성능에 따라 좌우된다. 성능이 좋은 컴퓨터는 매우 빠르게 동작할 것이고, 성능이 좋지 않은 컴퓨터는 상대적으로 느리게 움직일 것이다.

 

따라서 pygame의 화면을 일정 간격으로 보여주도록 초당 프레임을 설정할 수 있다.

초당 프레임을 FPS(Frame Per Second)라 부른다.

 

FPS를 설정하기 위해서는 pygame의 Clock() 객체를 사용한다.

 

FPS는 60을 설정한다. 1초에 60번의 화면을 생성한다는 의미가 된다.

생성된 Clock() 객체의 tick 메서드를 이용하여 FPS를 설정한다.

 

# Clock 객체 생성

clock = pygame.time.Clock()

 

playing = True

 

while playing:

 

    ''' 코드 '''

 

    # fps 설정, while 구문안에 넣는다.

    clock.tick(60)

 

 

 

3. 전체 코드

 

게임 루프를 설정한 내용이다. 아직 안에 아무런 코드도 없으므로 어떤 동작도 하지 않는다.

 

import pygame

 

# 전체 스크린의 가로, 세로 크기 설정

SCREEN_WIDTH = 400

SCREEN_HEIGHT = 500

 

# 초기화

pygame.init()

 

# 스크린 생성

SCREEN = pygame.display.set_mode( (SCREEN_WIDTH, SCREEN_HEIGHT) )

 

# window의 타이틀 설정

pygame.display.set_caption("pygame test")

 

 

# Clock 객체 생성

clock = pygame.time.Clock()

 

playing = True

 

while playing:

 

    ''' 코드 '''

 

    # fps 설정, while 구문안에 넣는다.

    clock.tick(60)

 

+ Recent posts