Pygame 패키지의 pygame.time.Clock 클래스를 이용해 게임 화면이 바뀌는 시간을 제어해 본다.
본 글에서 사용하거나 참고하는 기능에 대한 정의는 다음과 같다.
pygame.time.wait(milliseconds) -> time
pygame.time.get_ticks() -> milliseconds
pygame.time.Clock() -> Clock
Clock.tick(framerate=0) -> milliseconds
Clock.get_time() -> milliseconds
예제 코드 1
<코드 1>
# python 3.9.6
# pygame 2.0.1
import pygame
import time
import random
def main():
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
pre_time = time.time()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT\
or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
break
if not running:
continue
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
(100, 100, 300, 300))
pygame.display.update()
print(time.time() - pre_time)
pre_time = time.time()
pygame.quit()
if __name__ == '__main__':
main()
<코드 1>을 실행하면 게임 화면에서 지정한 영역의 색이 변경되는 것을 볼 수 있다.
하지만 지정된 영역의 색은 너무 빨리 바뀐다.
파이썬 표준 라이브러리인 time을 이용해 시간 간격을 출력해 보니 1ms 이하로 색이 바뀌고 있다.
0.0010025501251220703
0.0
0.0009968280792236328
0.0
0.0010058879852294922
0.0
0.0
0.0009927749633789062
0.0010056495666503906
0.0
0.000997781753540039
0.0009946823120117188
0.001001119613647461
0.0010027885437011719
0.0009930133819580078
0.0
예제 코드 2
<코드 2>
# python 3.9.6
# pygame 2.0.1
import pygame
import random
def main():
pygame.init()
screen = pygame.display.set_mode((640, 480))
running = True
pre_time = pygame.time.get_ticks()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT\
or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
break
if not running:
continue
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
(100, 100, 300, 300))
pygame.display.update()
pygame.time.wait(500)
print(pygame.time.get_ticks() - pre_time)
pre_time = pygame.time.get_ticks()
pygame.quit()
if __name__ == '__main__':
main()
<코드 2>를 실행하면 0.5초 마다 지정한 영역의 색상이 변경되는 것을 볼 수 있다.
<코드 2>는 0.5초 간 프로그램 실행을 대기 상태로 놓기 위해 pygame.time.wait() 함수를 사용한다.
그리고 pygame 프로그램이 시작하고 난 후 시간의 경과를 확인하기 위해 pygame.time.get_ticks() 함수도 사용한다.
코드 print(pygame.time.get_ticks() - pre_time)의 실행 결과는 아래와 같다.
502
501
502
501
501
502
501
502
502
502
예제 코드 3
<코드 3>
# python 3.9.6
# pygame 2.0.1
import pygame
import random
def main():
pygame.init()
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
running = True
pre_time = pygame.time.get_ticks()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT\
or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
break
if not running:
continue
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
(100, 100, 300, 300))
pygame.display.update()
clock.tick(2)
print(pygame.time.get_ticks() - pre_time)
pre_time = pygame.time.get_ticks()
print(clock.get_time())
pygame.quit()
if __name__ == '__main__':
main()
<코드 3>은 pygame.time.Clock 클래스를 사용해 게임 화면이 바뀌는 시간을 제어한다.
코드 clock.tick(2)는 1초에 2번 clock.tick(2) 함수가 호출되도록 한다.
코드 clock.get_time()는 clock.tick() 함수가 호출된 시간 간격을 반환한다.
'코딩 > 파이썬 pygame' 카테고리의 다른 글
파이썬 게임 008. pygame.draw.aaline 및 pygame.draw.aalines 함수로 직선의 안티에일리어싱 효과 적용 (위신호 제거) (0) | 2021.09.27 |
---|---|
파이썬 게임 007. pygame.draw.line 및 pygame.draw.lines 함수로 직선 그리기 (0) | 2021.09.25 |
파이썬 게임 005. pygame.Surface.fill 함수로 게임 배경색 변경 (0) | 2021.09.21 |
파이썬 게임 004. 클래스 기반 pygame 프로그램의 기본 구조 (0) | 2021.09.13 |
파이썬 게임 003. 함수 기반 pygame 프로그램의 기본 구조, Pygame 문서 (0) | 2021.09.09 |