Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使我的精灵在pygame中不横向移动?_Python_Pygame - Fatal编程技术网

Python 如何使我的精灵在pygame中不横向移动?

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维空间移动,左,右,上,下。我怎样才能使精灵不横着走呢

'''

'''


我已经将这个动作编码为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