按住不工作的键时移动精灵

moving a sprite while holding down a key not working

所以我试着让我的精灵在按住箭头键时不断移动,但我需要一直按住它才能移动它。知道为什么吗? 这是我的代码:

是的,我已经导入了 pygame 和所有内容

class Block(pygame.sprite.Sprite):

    def __init__(self, color = blue,widht = 64, height = 64):

        super(Block, self).__init__()

        self.image = pygame.Surface((widht, height))
        self.image.fill(color)
        self.rect = self.image.get_rect()

        self.sound = pygame.mixer.Sound("2dSounds/Walk.wav")

        self.hspeed = 0
        self.vspeed = 0

更新精灵,所以它会根据我按下的键改变位置

    def update(self):
        self.rect.x += self.hspeed
        self.rect.y += self.vspeed

使用 a_block.change_speed(...)

改变速度
    def change_speed(self, hspeed, vspeed):
        self.hspeed += hspeed
        self.vspeed += vspeed

第一次创建时设置精灵的位置

    def set_position(self, x, y):
        self.rect.x = x 
        self.rect.y = y 

为我刚刚创建的精灵设置图像

    def set_image(self, filename = None):
        if(filename != None):
            self.image = pygame.image.load(filename)
            self.rect = self.image.get_rect()

播放声音

    def play_sound():
        self.sound.play()

游戏循环

def game_loop():    
    a_block  = Block()

    global event


    gameDisplay.fill(white)

#Quit

    gameExit = False



    while not gameExit:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

不起作用的控件

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    a_block.change_speed(-20, 0)            
                if event.key == pygame.K_RIGHT:
                    a_block.change_speed(20, 0) 
                if event.key == pygame.K_UP:
                    a_block.change_speed(0, -20)
                if event.key == pygame.K_DOWN:
                    a_block.change_speed(0, 20) 
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT:
                    a_block.change_speed(0, 0)          
                if event.key == pygame.K_RIGHT:
                    a_block.change_speed(0, 0)  
                if event.key == pygame.K_UP:
                    a_block.change_speed(0, 0)
                if event.key == pygame.K_DOWN:
                    a_block.change_speed(0, 0)  

画画a_block和其他东西

        block_group = pygame.sprite.Group()

        gameDisplay.fill(white)
        a_block.set_image('2dImages/brick.png')
        a_block.set_position(display_width/2, display_height/2)
        a_block.update()
        block_group.add(a_block)

        block_group.draw(gameDisplay)

更新显示

    pygame.display.update()
    clock.tick(60)

提前致谢!!

在您的代码开头(但在您调用 pygame.init() 之后),添加以下代码行:

pygame.key.set_repeat(10)

这将每 10 毫秒将 post 键盘事件发送到事件队列,即使按键已经被按下也是如此。