【发布时间】:2014-01-31 16:21:57
【问题描述】:
我在用 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 = 30currentchar.posx, currentchar.posy 都是 元组 设置在 (300, 240)
【问题讨论】:
-
这个问题似乎是题外话,因为它属于gamedev.stackexchange.com
-
在游戏开发方面会更好,但仍然是关于编程。
标签: python animation pygame lag keyboard-input