有几种方法,例如跟踪系统时间或使用 aClock
和计数滴答。
但最简单的方法是使用事件队列并每 x ms 创建一个事件,使用pygame.time.set_timer()
:
pygame.time.set_timer()
在事件队列上重复创建一个事件
set_timer(eventid, milliseconds) -> None
将事件类型设置为每隔给定的毫秒数出现在事件队列中。在经过一定时间之前,第一个事件不会出现。
每个事件类型都可以附加一个单独的计时器。最好使用 pygame.USEREVENT 和 pygame.NUMEVENTS 之间的值。
要禁用事件的计时器,请将毫秒参数设置为 0。
这是一个小型运行示例,其中蛇每 250 毫秒移动一次:
import pygame
pygame.init()
screen = pygame.display.set_mode((300, 300))
player, dir, size = pygame.Rect(100,100,20,20), (0, 0), 20
MOVEEVENT, t, trail = pygame.USEREVENT+1, 250, []
pygame.time.set_timer(MOVEEVENT, t)
while True:
keys = pygame.key.get_pressed()
if keys[pygame.K_w]: dir = 0, -1
if keys[pygame.K_a]: dir = -1, 0
if keys[pygame.K_s]: dir = 0, 1
if keys[pygame.K_d]: dir = 1, 0
if pygame.event.get(pygame.QUIT): break
for e in pygame.event.get():
if e.type == MOVEEVENT: # is called every 't' milliseconds
trail.append(player.inflate((-10, -10)))
trail = trail[-5:]
player.move_ip(*[v*size for v in dir])
screen.fill((0,120,0))
for t in trail:
pygame.draw.rect(screen, (255,0,0), t)
pygame.draw.rect(screen, (255,0,0), player)
pygame.display.flip()