我开始使用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)
另一种简单的方法是简单地使用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)

在 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)