当按下两个键时,箭头键不会沿对角方向移动pygame.surface

时间:2018-03-28 17:18:46

标签: python-3.x pygame pycharm

我在MacBook Air上使用Pycharm CE上的python 3。我以前和目前正在研究使用pygame的基本游戏。出于某种原因,当我按住向下键向下按,然后按右键,它将对角线向下移动到右边(这就是我喜欢的)。但是,当我向右移动,然后同时按向上键时,它不会执行此操作。它不仅限于右/下键,它只是我向下/向上移动播放器并同时按左/右,然后它对角移动。但是,如果我向右/向左移动播放器并同时按向上/向下,则它不会沿对角线移动。

我认为它与pycharm,pygame或python处理键盘输入的方式有关,但我不确定。有其他人有这些问题/烦恼吗?

    def key_pressed(self):

        key_pressed = pygame.key.get_pressed()

        if key_pressed[pygame.K_RIGHT]:
            self.vx = 500

        elif key_pressed[pygame.K_LEFT]:
            self.vx = -500

        elif key_pressed[pygame.K_UP]:
            self.vy = -500

        elif key_pressed[pygame.K_DOWN]:
            self.vy = 500

        else:
            self.vy = 0
            self.vx = 0



    def update(self):
        self.rect.x += self.vx * self.game.dt
        self.rect.y += self.vy * self.game.dt


        self.key_pressed()

2 个答案:

答案 0 :(得分:1)

我认为上面发布的答案几乎可以解决问题 - 我认为只有在没有按键的情况下才会重置vx和vy值。它似乎不太理想,但有两个独立的块可以解决问题。在上面发布的代码中," else"只有在最后一次" if"是的。

def key_pressed(self):

    key_pressed = pygame.key.get_pressed()

    if key_pressed[pygame.K_RIGHT] or key_pressed[pygame.K_LEFT]:
        if key_pressed[pygame.K_RIGHT]:
            self.vx = 500
        if key_pressed[pygame.K_LEFT]:
            self.vx = -500
    else:
        self.vx = 0

    if key_pressed[pygame.K_UP] or key_pressed[pygame.K_DOWN]:
        if key_pressed[pygame.K_DOWN]:
            self.vy = 500
        if key_pressed[pygame.K_UP]:
            self.vy = -500
    else:
        self.vy = 0

尝试一下,如果它修复了您所看到的行为,请告知我们。

答案 1 :(得分:0)

尝试用if语句替换elif语句,这样就不会跳过任何按键操作:

    if key_pressed[pygame.K_RIGHT]:
        self.vx = 500

    if key_pressed[pygame.K_LEFT]:
        self.vx = -500

    if key_pressed[pygame.K_UP]:
        self.vy = -500

    if key_pressed[pygame.K_DOWN]:
        self.vy = 500

    else:
        self.vy = 0
        self.vx = 0