如果我想根据pygame中的键输入移动一个精灵,那么无论如何都要编写代码,所以如果我按下一个键,精灵会一直朝这个方向移动,直到我释放密钥?我试过这个,程序崩溃了,或者我必须反复点击键才能将精灵移动到预定的方向。
答案 0 :(得分:5)
OP需要关键状态轮询,而非KEYDOWN
事件。
此示例显示使用键事件和键轮询。你使用一个用于'按键按下'而另一个用于'按住'。
import pygame
from pygame.locals import *
done = False
player.pos = Rect(0,0,10,10)
while not done:
for event in pygame.event.get():
# any other key event input
if event.type == QUIT:
done = True
elif event.type == KEYDOWN:
if event.key == K_ESC:
done = True
# get key current state
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
player.pos.left -= 10
if keys[K_RIGHT]:
player.pos.left += 10
if keys[K_UP]:
player.pos.top -= 10
if keys[K_DOWN]:
player.pos.left += 10
if keys[K_SPACE]:
print 'firing gun'
答案 1 :(得分:0)
概述,
KEYDOWN
事件。KEYUP
事件的邮件队列。阅读documentation,了解如何实现这一目标。
答案 2 :(得分:0)
您通常在更新方法中使用移动函数,如下所示:
this.pos_x = direction * speed * delta
现在在您的KEYDOWN事件中,您将方向设置为1或-1,在KEYUP上将其设置为0.这样您就可以有一个很好的恒定运动。