用pygame编写了一个小程序后,我遇到了一个问题。该程序采用拆分的 .GIF 动画并通过以下方式加载图像(gif 帧):
pygame.image.load(filename)
这将返回一个 pygame 表面对象,然后将其附加到一个数组中。该程序将大约15 帧加载到一个数组中,总共使用6 个数组。
我遇到的问题是通过我的while 循环接受输入时。循环播放其空闲动画和运行动画很好,但是,在接受来自键盘的输入时(从 pygame 的事件列表中获取输入......)
for event in pygame.event.get():
通过pygame.KEYDOWN
有非常明显的滞后,导致动画集切换反应迟钝。如果我要使用这种方法制作游戏,则必须对其进行修复。我确定我的代码效率低下,但不产生暂停就足够了。任何帮助都会很棒。
我猜?pygame.clock.tick()
正在创建某种事件滞后,但我不确定如何解决这个问题,如果事件滞后甚至是这种情况。
这是我怀疑有问题的循环:
while running == 2:
pygame.display.flip()
#mouse = pygame.mouse.get_pos()
#events = pygame.event.get()
#(pygame.QUIT, pygame.KEYDOWN, pygame.KEYUP)
for event in pygame.event.get():
#event = pygame.event.wait()
if event.type == pygame.QUIT:
sys.exit(0)
elif event.type == pygame.KEYDOWN:
print event.key
wait = 0
if event.key == pygame.K_d:
tmpcache = wr
lastkey = "wr"
elif event.key == pygame.K_a:
tmpcache = wl
lastkey = "wl"
elif event.type == pygame.KEYUP:
wait = 1
if lastkey == "wr":
tmpcache = sr
elif lastkey == "wl":
tmpcache = sl
if wait == 1:
for frame in tmpcache:
screen.blit(test, (0,0))
screen.blit(frame, (currentchar.posx, currentchar.posy))
pygame.display.flip()
clock.tick(charfps)
else:
for frame in tmpcache:
screen.blit(test, (0,0))
screen.blit(frame, (currentchar.posx, currentchar.posy))
pygame.display.flip()
clock.tick(charfps)
此处未显示一些变量,但已使用:
charfps = 30
currentchar.posx, currentchar.posy
两个元组都设置在(300, 240)