我在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()
答案 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