파이게임 clock.tick()

Salman Mehmood 2023년6월21일
  1. 파이게임 게임 루프에서 clock.tick() 및 FPS 사용
  2. clock.tick() 메서드의 워크플로
파이게임 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으로 유지되는 것을 볼 수 있습니다.

출력:

파이게임 시계 틱

Salman Mehmood avatar Salman Mehmood avatar

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

관련 문장 - Pygame Method