常量键输入可以不断移动精灵吗?

时间:2012-11-03 03:19:28

标签: python sprite pygame game-engine

如果我想根据pygame中的键输入移动一个精灵,那么无论如何都要编写代码,所以如果我按下一个键,精灵会一直朝这个方向移动,直到我释放密钥?我试过这个,程序崩溃了,或者我必须反复点击键才能将精灵移动到预定的方向。

3 个答案:

答案 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)

概述,

  • 在pygame消息队列中监听KEYDOWN事件。
  • 检查您感兴趣的密钥是否被按下。
  • 朝那个方向移动
  • 检查与您的密钥匹配的KEYUP事件的邮件队列。
  • 停止移动。

阅读documentation,了解如何实现这一目标。

答案 2 :(得分:0)

您通常在更新方法中使用移动函数,如下所示:

this.pos_x = direction * speed * delta

现在在您的KEYDOWN事件中,您将方向设置为1或-1,在KEYUP上将其设置为0.这样您就可以有一个很好的恒定运动。