Python 3,8 таймер пигмей? - PullRequest
       7

Python 3,8 таймер пигмей?

2 голосов
/ 28 января 2020

Я новичок в python и поэтому решил попробовать сделать простую игру в pygame. Я хочу добавить таймер / часы, которые показывают, как долго вы «играли / выжили», поэтому в основном создаем часы. Тем не менее, я искал вокруг и получил функцию time.sleep (1), и она действительно работает как часы, но она замедляет все остальное в игре до такой степени, что она едва перемещается.

Есть ли простой способ добавить часы на игровой экран?

1 Ответ

2 голосов
/ 28 января 2020

Количество миллисекунд с pygame.init() может быть получено с помощью pygame.time.get_ticks(). См. pygame.time module.


Кроме того, в Pygame существует событие таймера. Используйте pygame.time.set_timer(), чтобы повторно создать USEREVENT. Например:

time_delay = 500 # 0.5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event , time_delay )

Обратите внимание, в Pygame могут быть определены события клиента. Каждому событию нужен уникальный идентификатор. Идентификаторы пользовательских событий должны начинаться с pygame.USEREVENT. В этом случае pygame.USEREVENT+1 является идентификатором события таймера.

Получить событие в событии l oop:

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

         elif event.type == timer_event:
             # [...]

Событие таймера можно остановить, передав 0 к параметру времени.


См. пример:

import pygame

pygame.init()
window = pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 100)

counter = 0
text = font.render(str(counter), True, (0, 128, 0))

time_delay = 1000
timer_event = pygame.USEREVENT+1
pygame.time.set_timer(timer_event, time_delay)

# main application loop
run = True
while run:
    clock.tick(60)

    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == timer_event:
            # recreate text
            counter += 1
            text = font.render(str(counter), True, (0, 128, 0))

    # clear the display
    window.fill((255, 255, 255))

    # draw the scene
    text_rect = text.get_rect(center = window.get_rect().center)   
    window.blit(text, text_rect)

    # update the display
    pygame.display.flip()
...