Python 如何使我的精灵在pygame中不横向移动?
我试图让我的精灵只在4维空间移动,左,右,上,下。我怎样才能使精灵不横着走呢 ''' '''Python 如何使我的精灵在pygame中不横向移动?,python,pygame,Python,Pygame,我试图让我的精灵只在4维空间移动,左,右,上,下。我怎样才能使精灵不横着走呢 ''' ''' 我已经将这个动作编码为4维,当我按下键盘上的一个按钮时,它会向左移动,同时按住左键,如果我按下D键,它会停止并向右移动。这很好,没问题。然而,如果我在按住左键的同时按W键,它会向上向左移动。我怎样才能不让这一切发生。如果我按住A,并且在按住A的同时按W,我希望精灵继续向左移动。问题在于您的If语句: if keystate[pygame.K_LEFT] or keystate[pygame.K_a]:
我已经将这个动作编码为4维,当我按下键盘上的一个按钮时,它会向左移动,同时按住左键,如果我按下D键,它会停止并向右移动。这很好,没问题。然而,如果我在按住左键的同时按W键,它会向上向左移动。我怎样才能不让这一切发生。如果我按住A,并且在按住A的同时按W,我希望精灵继续向左移动。问题在于您的
If
语句:
if keystate[pygame.K_LEFT] or keystate[pygame.K_a]: # Check if the left arrow key is down at the moment
self.image = self.leftImage
self.speedX = -7
self.rect.x += self.speedX
if keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
self.image = self.rightImage
self.speedX = 7
self.rect.x += self.speedX
if keystate[pygame.K_UP] or keystate[pygame.K_w]:
self.image = self.upImage
self.speedY = -7
self.rect.y += self.speedY
if keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
self.image = self.downImage
self.speedY = 7
self.rect.y += self.speedY
当您同时按住多个键时,例如左箭头键和向上箭头键,
keystate[pygame.K_LEFT]
和keystate[pygame.K_UP]
将在同一次迭代中返回True
。
这就像“哦,你按了左键,所以我将从x
中删除7
”,同时
“哦,你按了,所以我将从y
中删除7
”
您可以通过将最后三条if
语句更改为elif
来避免这种情况。它告诉python:
“只有在我正上方的情况没有发生时才对我进行评估。如果发生了,跳过我。”
使用
如果你不在乎它应该选择两个方向中的哪一个,你可以简单地将“If”替换为“elif”(第一个除外)。谢谢你,先生:)这就解决了我的问题
if keystate[pygame.K_LEFT] or keystate[pygame.K_a]: # Check if the left arrow key is down at the moment
self.image = self.leftImage
self.speedX = -7
self.rect.x += self.speedX
if keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
self.image = self.rightImage
self.speedX = 7
self.rect.x += self.speedX
if keystate[pygame.K_UP] or keystate[pygame.K_w]:
self.image = self.upImage
self.speedY = -7
self.rect.y += self.speedY
if keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
self.image = self.downImage
self.speedY = 7
self.rect.y += self.speedY
if keystate[pygame.K_LEFT] or keystate[pygame.K_a]: # Check if the left arrow key is down at the moment
self.image = self.leftImage
self.speedX = -7
self.rect.x += self.speedX
elif keystate[pygame.K_RIGHT] or keystate[pygame.K_d]:
self.image = self.rightImage
self.speedX = 7
self.rect.x += self.speedX
elif keystate[pygame.K_UP] or keystate[pygame.K_w]:
self.image = self.upImage
self.speedY = -7
self.rect.y += self.speedY
elif keystate[pygame.K_DOWN] or keystate[pygame.K_s]:
self.image = self.downImage
self.speedY = 7
self.rect.y += self.speedY