如何使用 PyGame 计时器事件?如何使用计时器向 pygame 屏幕添加时钟?
How do I use a PyGame timer event? How to add a clock to a pygame screen using a timer?
我是 python 的新手,因此决定尝试在 pygame
中制作一款简单的游戏。我想添加一个 timer/clock 来显示“你有 played/survived” 的时间,所以基本上创建了一个时钟。
但是,我四处搜索并获得了 time.sleep(1)
功能,它确实可以用作时钟,但它会使游戏的其他所有内容减慢到几乎不动的程度。
有没有简单的方法可以在游戏屏幕上添加时钟?
自 pygame.init()
以来的毫秒数可以通过 pygame.time.get_ticks()
. See pygame.time
模块检索。
此外 pygame 中存在一个计时器事件。使用 pygame.time.set_timer()
to repeatedly create an USEREVENT
。例如:
time_delay = 500 # 0.5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event , time_delay )
请注意,在 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:
# [...]
可以通过将 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()
我是 python 的新手,因此决定尝试在 pygame
中制作一款简单的游戏。我想添加一个 timer/clock 来显示“你有 played/survived” 的时间,所以基本上创建了一个时钟。
但是,我四处搜索并获得了 time.sleep(1)
功能,它确实可以用作时钟,但它会使游戏的其他所有内容减慢到几乎不动的程度。
有没有简单的方法可以在游戏屏幕上添加时钟?
自 pygame.init()
以来的毫秒数可以通过 pygame.time.get_ticks()
. See pygame.time
模块检索。
此外 pygame 中存在一个计时器事件。使用 pygame.time.set_timer()
to repeatedly create an USEREVENT
。例如:
time_delay = 500 # 0.5 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event , time_delay )
请注意,在 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:
# [...]
可以通过将 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()