파이게임 clock.tick()
우리는 이 글에서 clock.tick()
메소드와 파이게임 모듈에서 어떻게 작동하는지에 대해 배울 것입니다. 또한 틱과 fps의 차이점이 무엇인지 알아봅니다.
파이게임 게임 루프에서 clock.tick()
및 FPS 사용
clock.tick()
대 FPS
clock.tick()
이라는 함수를 살펴보겠습니다. 이 함수를 호출하면 프로세서가 수행하는 틱 수를 반환합니다.
tick()
에 150을 넣으면 프로세서 실행 시간인 0.15초에 150틱이 완료됩니다.
루프가 실행될 때마다 한 픽셀씩 이동하면 프로세서가 더 빠른 컴퓨터에서는 더 빠르고 프로세서가 더 느린 컴퓨터에서는 더 느려집니다. 클록 틱을 사용할 때마다 1틱을 1밀리초로 계산하기 때문에 이 사실을 아는 것이 중요합니다.
FPS는 초당 프레임 속도를 나타내며 FPS는 GPU 성능에 따라 다릅니다. 예를 들어 30fps로 게임을 하고 있다면 초당 30프레임을 보여주지만 육안으로는 변화를 볼 수 없다.
스트리밍 중에 게임이 부족하다면 GPU 처리 속도가 느리기 때문입니다.
clock.tick()
메서드의 워크플로
실제 코드에 들어가기 전에 파이게임에는 몇 초를 기다린 다음 일부 코드를 실행하는 내장 함수가 없기 때문에 타이머의 논리에 대해 이야기해 봅시다. 하지만 그러한 함수가 없기 때문에 타이머를 만들어야 했습니다.
pygame
을 시작하면 타이머가 실행되기 시작하고 밀리초 단위로 카운트되며 시간이 얼마나 경과했는지 측정할 수 있습니다. 가능한 한 자주 단일 지점을 측정하고 타이머로 전환해야 합니다.
정적 지점을 호출하면 지속적으로 지점을 측정해야 하며 중단 지점은 마지막 또는 현재 시간이 됩니다. 현재 시간과 정적 지점의 차이는 타이머의 길이입니다.
2초 타이머를 원하면 current-time - static-time>2000
과 같은 라인이 필요하고 원하는 코드를 실행합니다. 매 프레임마다 시간만 측정하기 때문에 밀리초마다 시간을 측정하지는 않습니다. 초당 60프레임이면 16밀리초마다 시간만 측정합니다.
Python 스크립트에서 모든 논리를 구현해 봅시다.
import pygame
import sys
pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
clock.tick(60)
파이 게임
모듈을 가져오는 것으로 시작한 다음 파이 게임을 시작한 다음 800 x 800 픽셀로 창을 표시하는 기본 디스플레이 표면 개체를 만듭니다. 다음 줄에서는 pygame.time.Clock()
을 사용하여 정확한 시간을 측정하기 위해 시계를 만듭니다.
그런 다음 게임 루프로 이동하여 플레이어가 탈출 버튼을 누르면 입력을 확인합니다. 이 pygame.display.flip()
은 프레임을 그리고 clock.tick(60)
은 초당 60프레임이 되도록 시간을 정확하게 측정합니다.
타이머를 구현하기 위해 0이 될 MyCurrent_Time
이라는 변수를 만들고 이 변수는 모든 프레임의 시간을 저장합니다. 이 변수는 이 while 루프에서 pygame.time.get_ticks()
를 호출하고 밀리초를 제공하는 데 사용됩니다.
이제 button_pressTime
이라는 또 다른 변수를 만들고 0으로 초기화하고 버튼이 눌렸는지 확인합니다. 그래서 우리는 이 변수를 가져와 같은 함수 pygame.time.get_ticks()
를 할당합니다.
아래쪽 키를 누른 후 화면을 흰색으로 채우고 싶습니다. fill()
메서드를 사용하고 RGB 값을 튜플로 전달하고 2초 후에 창 화면이 검은색으로 채워집니다.
전체 코드 조각:
import pygame
import sys
pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()
MyCurrent_Time = 0
button_pressTime = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
button_pressTime = pygame.time.get_ticks()
Myscreen.fill((255, 255, 255))
MyCurrent_Time = pygame.time.get_ticks()
if MyCurrent_Time - button_pressTime > 2000:
Myscreen.fill((0, 0, 0))
print(f"current time {MyCurrent_Time} button pressed time {button_pressTime}")
pygame.display.flip()
clock.tick(60)
출력에서 매 틱마다 현재 시간이 증가하고 아래쪽 키를 누르지 않을 때까지 정적 시간이 0으로 유지되는 것을 볼 수 있습니다.
출력:
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn