继续按住钥匙然后释放另一个

时间:2019-06-05 02:06:17

标签: python pygame

我实际上正在用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()释放一个按钮后返回一个空列表。

1 个答案:

答案 0 :(得分:0)

仅当事件发生时才执行事件循环。按下按钮时和按下按钮时均发生事件。按住按钮时不会发生任何事件,并且不会执行事件循环。
鼠标的移动将是一个事件,导致事件循环被执行。

在主循环(事件循环外部)中使用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()