首页 > 解决方案 > 继续按住一个键并释放另一个

问题描述

我实际上是在用 pygame 创建我的第一个游戏,但是我遇到了一个问题:当我按住 2 个按钮时,一切正常,但是一旦我释放其中一个,pygame.event.get() 返回一个空列表即使我一直握着另一个。因为那个问题,我的角色无法向前跳跃。谢谢帮助!

使用 python Windows 10 和 pygame 1.9.6

在“字符”类中:

def move_right(self):
    self.speedx += 3
    self.sprite = "stand_r"
def move_left(self):
    self.speedx -= 3
    self.sprite = "stand_l"
def speed_effect(self):
    self.posx += self.speedx
    self.posy -= self.speedy
    #speed limitation :
    if self.speedx > 10 :
        self.speedx = 10
    if self.speedx < -10 :
        self.speedx = -10

在主循环之前:

pygame.key.set_repeat(100,30)
pygame.time.Clock().tick(30)

在主循环中:

for event in pygame.event.get():  
    keys = pygame.key.get_pressed()
    if event.type == QUIT:
        continuer = 0
    if event.type == KEYDOWN:
        if keys[pygame.K_d] or event.key == K_d:
            character.move_right()
        if keys[pygame.K_a] or event.key == K_a:
            character.move_left()
        #jump
        if character.grounded :
            if keys[pygame.K_SPACE]:
                character.speedy = 30

pygame.event.get() 释放一个按钮后返回一个空列表。

标签: pythonpygame

解决方案


事件循环仅在事件发生时执行。在按下按钮的那一刻和第二次释放按钮时发生一个事件。当按钮被按住时,不会发生任何事件,并且不会执行事件循环。
鼠标的移动将是一个导致事件循环被执行的事件。

在主循环(事件循环外)中使用pygame.key.get_pressed(),随时获取按键的状态并执行character. 由 给出的状态在被调用pygame.key.get_pressed()时是同步pygame.event.get()的。

for event in pygame.event.get():  
    keys = pygame.key.get_pressed()
    if event.type == QUIT:
        continuer = 0
    if event.type == KEYDOWN:
        if character.grounded :
            if event.key == pygame.K_SPACE:
                character.speedy = 30

keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
    character.move_right()
if keys[pygame.K_a]:
    character.move_left()

推荐阅读