我在MacBook Air上使用Pycharm上的python3。我以前也做过,目前正在做一些基本的游戏,使用游戏。由于某些原因,当我按住向下键向下,然后按右键,它会将玩家斜移到右边(这就是我喜欢的)。但是,当我向右移动,然后同时按up键时,它不会做这种行为。它不仅限于右/下键,它只是如果我移动球员向下/向上,同时按左/右,然后它移动对角线。然而,如果我移动球员的右/左,同时按上/下,那么它不会对角移动。
我认为这与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()发布于 2018-04-03 17:48:09
我认为上面发布的答案几乎让你明白了--我认为问题是,只有在没有按键的情况下,你才会重置vx和vy值。这似乎不太理想,但有两个独立的区块可以解决问题。在上面发布的代码中,只有在最后一个" if“为真的情况下,才会激活”posted“。
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试试这个,让我们知道它是否修复了你所看到的行为。
发布于 2018-04-03 17:17:04
尝试用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 = 0https://stackoverflow.com/questions/49540581
复制相似问题