如何使用 PyGame 计时器事件?如何使用计时器向 pygame 屏幕添加时钟?

Mok*_*isa 5 python pygame clock python-3.x

我是 python 新手,因此决定尝试用pygame. 我想添加一个计时器/时钟来显示“你已经玩了/生存了多长时间”,所以基本上创建了一个时钟。

然而,我四处搜索并获得了该time.sleep(1)功能,它确实可以作为时钟使用,但它会减慢游戏的其他所有内容,使其几乎无法移动。

有没有一种简单的方法可以在游戏屏幕上添加时钟?

Rab*_*d76 5

pygame.init()可以通过 检索此后的毫秒数pygame.time.get_ticks()。参见pygame.time模块。


此外,在 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 )
Run Code Online (Sandbox Code Playgroud)

注意,在 pygame 中可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 id 必须以 开始pygame.USEREVENT。在本例中pygame.USEREVENT+1是计时器事件的事件 ID。

在事件循环中接收事件:

running = True
while running:

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

         elif event.type == timer_event:
             # [...]
Run Code Online (Sandbox Code Playgroud)

可以通过向时间参数传递 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()
Run Code Online (Sandbox Code Playgroud)