Pygame倒计时器

ada*_*o94 7 python pygame

我开始使用pygame,我想做简单的游戏.我需要的其中一个元素是倒数计时器.如何在PyGame中进行倒计时时间(例如10秒)?

Dan*_*noi 10

在此页面上,您会找到您想要的内容http://www.pygame.org/docs/ref/time.html#pygame.time.get_ticks
在开始倒计时之前,您下载了一次滴答声(这可能是游戏-关键事件,无论如何)。例如:

start_ticks=pygame.time.get_ticks() #starter tick
while mainloop: # mainloop
    seconds=(pygame.time.get_ticks()-start_ticks)/1000 #calculate how many seconds
    if seconds>10: # if more than 10 seconds close the game
        break
    print (seconds) #print how many seconds
Run Code Online (Sandbox Code Playgroud)


slo*_*oth 7

另一种简单的方法是简单地使用pygame的事件系统.

这是一个简单的例子:

import pygame
pygame.init()
screen = pygame.display.set_mode((128, 128))
clock = pygame.time.Clock()

counter, text = 10, '10'.rjust(3)
pygame.time.set_timer(pygame.USEREVENT, 1000)
font = pygame.font.SysFont('Consolas', 30)

while True:
    for e in pygame.event.get():
        if e.type == pygame.USEREVENT: 
            counter -= 1
            text = str(counter).rjust(3) if counter > 0 else 'boom!'
        if e.type == pygame.QUIT: break
    else:
        screen.fill((255, 255, 255))
        screen.blit(font.render(text, True, (0, 0, 0)), (32, 48))
        pygame.display.flip()
        clock.tick(60)
        continue
    break
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Rab*_*d76 5

在 pygame 中存在一个计时器事件。用于pygame.time.set_timer()重复创建USEREVENT. 例如:

timer_interval = 500 # 0.5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event , timer_interval)
Run Code Online (Sandbox Code Playgroud)

注意,在 pygame 中可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 id 必须介于pygame.USEREVENT(24) 和pygame.NUMEVENTS(32) 之间。在本例中pygame.USEREVENT+1是计时器事件的事件 ID。
要禁用事件的计时器,请将毫秒参数设置为 0。

在事件循环中接收事件:

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 = 10
text = font.render(str(counter), True, (0, 128, 0))

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

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == timer_event:
            counter -= 1
            text = font.render(str(counter), True, (0, 128, 0))
            if counter == 0:
                pygame.time.set_timer(timer_event, 0)                

    window.fill((255, 255, 255))
    text_rect = text.get_rect(center = window.get_rect().center)
    window.blit(text, text_rect)
    pygame.display.flip()
Run Code Online (Sandbox Code Playgroud)