制作循环直到在pygame中按下键

时间:2014-12-05 17:39:57

标签: python pygame

在我的代码中,我想在按下键时移动对象,并在释放键时停止。但是,即使按下按键,它也只移动一步。这是示例代码。我打印了(x,y)值。有什么建议吗?感谢。

x = 20
y = 20

def keydown(evt):
        global x, y
        if evt.type == pygame.KEYDOWN:
                if(evt.key == pygame.K_RIGHT): x += 2.0
                if(evt.key == pygame.K_LEFT): x -= 2.0
                if(evt.key == pygame.K_UP): y += 2.0
                if(evt.key == pygame.K_DOWN): y -= 2.0
        if evt.type == pygame.KEYUP:
                if(evt.key == pygame.K_RIGHT or evt.key == pygame.K_LEFT): x = x
                if(evt.key == pygame.K_UP or evt.key == pygame.K_DOWN): y = y


while True:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        pygame.quit()
                        sys.exit()

                print(x, y)
                keydown(event)

PS: 我在这个论坛(How can I make a sprite move when key is held down)的某处发布了这个但是没有成功。

keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]: x += 2.0
if keys[pygame.K_LEFT]: x -= 2.0
if keys[pygame.K_UP]: y += 2.0
if keys[pygame.K_DOWN]: y -= 2.0

1 个答案:

答案 0 :(得分:0)

x = 20
y = 20

def keydown(evt):
        global x, y
        if(evt[pygame.K_RIGHT]): x += 2.0
        if(evt[pygame.K_LEFT]): x -= 2.0
        if(evt[pygame.K_UP]): y += 2.0
        if(evt[pygame.K_DOWN]): y -= 2.0


while True:
        keys = pygame.key.get_pressed()
        event = pygame.event.poll()
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        print(x, y)
        keydown(keys)

所以首先你有一些代码从未在你的keydown函数中做任何事情

if evt.type == pygame.KEYUP:
    if(evt.key == pygame.K_RIGHT or evt.key == pygame.K_LEFT): x = x
    if(evt.key == pygame.K_UP or evt.key == pygame.K_DOWN): y = y

pygame.key.get_press()返回一个将pygame.KEY _ ****映射到布尔值的字典。迭代这只会给你布尔值,这对你没用。我写的代码将通过不断按下所有按键,并根据是否按下某些键来改变你的X和Y来工作。

如果您有任何其他问题可以随意提问,希望这有帮助!

如果仍然无效,请发布您的错误消息