为什么这段用于检查 pygame 中是否按下了两个键的代码不起作用?
Why is this code for checking if two keys being pressed in pygame not working?
下面的代码是我使用 pygame 编写的代码的一部分,只是为了检查左键 AND/OR 右键是否被按下并相应地移动播放器 img。除了最后一行之外的所有行都在运行和更新游戏的 while 循环中。按左键应该使 left_pressed 为真并将 playerX_change 设置为 -0.1(用于更新玩家的位置)。按右键应该相反。
所有功能都与左键一起使用,img 移动并在控制台中打印消息。
但是,右键不起作用。使用 print 测试一些东西表明按下右键确实将 right_pressed 设置为 True (至少暂时)但是当稍后检查 right_pressed 它现在是 False 并且不会移动 img 或打印一条消息。
(最后的 elif 语句是这样的,如果同时按下左右键,播放器 img 将不会移动。)
关于为什么在这种情况下右键与左键不同或者为什么 right_pressed 可能会过快地切换到 False 的任何想法都将是惊人的。
感谢任何帮助!谢谢! :)
'''
keys_pressed = pygame.key.get_pressed()
right_pressed = False
left_pressed = False
if keys_pressed[pygame.K_RIGHT]:
right_pressed = True
elif keys_pressed[pygame.K_LEFT]:
left_pressed = True
if pygame.K_RIGHT not in keys_pressed:
right_pressed = False
elif pygame.K_LEFT not in keys_pressed:
left_pressed = False
if right_pressed:
playerX_change = 0.1
print("Right pressed")
elif left_pressed:
playerX_change = -0.1
print("Left pressed")
elif right_pressed and left_pressed:
playerX_change = 0
print("Right and left pressed")
else:
playerX_change = 0
playerX += playerX_change
'''
因为您使用 if
和 elif
,如果第一个 if
为真,代码将永远不会处理 elif
。所以在这种情况下,如果 keys_pressed[pygame.K_RIGHT]
为真,它永远不会检查 keys_pressed[pygame.K_LEFT]
是否也为真。
因此进行此更改:
if keys_pressed[pygame.K_RIGHT]:
right_pressed = True
# elif keys_pressed[pygame.K_LEFT]:
if keys_pressed[pygame.K_LEFT]:
left_pressed = True
您在代码的开头将 right_pressed
和 left_pressed
设置为 False
。它们仅在按下键时才会更改,因此无需将它们设置回 False
.
最后,您应该先检查right_pressed and left_pressed
。否则,由于我之前提到的 if
和 elif
行为,如果其中一个为真,它永远不会进入检查两者的代码。
我已经精简了代码,试试这个。它将检查是否按下了右而不是左,然后检查是否按下了左而不是右。否则,playerX_change
将设置为 0 (因为这是同时按下或 none 按下的值).
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT] and not keys_pressed[pygame.K_LEFT]:
playerX_change = 0.1
print("Right pressed")
elif keys_pressed[pygame.K_LEFT] and not keys_pressed[pygame.K_RIGHT]:
playerX_change = -0.1
print("Left pressed")
else:
playerX_change = 0
playerX += playerX_change
下面的代码是我使用 pygame 编写的代码的一部分,只是为了检查左键 AND/OR 右键是否被按下并相应地移动播放器 img。除了最后一行之外的所有行都在运行和更新游戏的 while 循环中。按左键应该使 left_pressed 为真并将 playerX_change 设置为 -0.1(用于更新玩家的位置)。按右键应该相反。
所有功能都与左键一起使用,img 移动并在控制台中打印消息。
但是,右键不起作用。使用 print 测试一些东西表明按下右键确实将 right_pressed 设置为 True (至少暂时)但是当稍后检查 right_pressed 它现在是 False 并且不会移动 img 或打印一条消息。
(最后的 elif 语句是这样的,如果同时按下左右键,播放器 img 将不会移动。)
关于为什么在这种情况下右键与左键不同或者为什么 right_pressed 可能会过快地切换到 False 的任何想法都将是惊人的。
感谢任何帮助!谢谢! :) '''
keys_pressed = pygame.key.get_pressed()
right_pressed = False
left_pressed = False
if keys_pressed[pygame.K_RIGHT]:
right_pressed = True
elif keys_pressed[pygame.K_LEFT]:
left_pressed = True
if pygame.K_RIGHT not in keys_pressed:
right_pressed = False
elif pygame.K_LEFT not in keys_pressed:
left_pressed = False
if right_pressed:
playerX_change = 0.1
print("Right pressed")
elif left_pressed:
playerX_change = -0.1
print("Left pressed")
elif right_pressed and left_pressed:
playerX_change = 0
print("Right and left pressed")
else:
playerX_change = 0
playerX += playerX_change
'''
因为您使用 if
和 elif
,如果第一个 if
为真,代码将永远不会处理 elif
。所以在这种情况下,如果 keys_pressed[pygame.K_RIGHT]
为真,它永远不会检查 keys_pressed[pygame.K_LEFT]
是否也为真。
因此进行此更改:
if keys_pressed[pygame.K_RIGHT]:
right_pressed = True
# elif keys_pressed[pygame.K_LEFT]:
if keys_pressed[pygame.K_LEFT]:
left_pressed = True
您在代码的开头将 right_pressed
和 left_pressed
设置为 False
。它们仅在按下键时才会更改,因此无需将它们设置回 False
.
最后,您应该先检查right_pressed and left_pressed
。否则,由于我之前提到的 if
和 elif
行为,如果其中一个为真,它永远不会进入检查两者的代码。
我已经精简了代码,试试这个。它将检查是否按下了右而不是左,然后检查是否按下了左而不是右。否则,playerX_change
将设置为 0 (因为这是同时按下或 none 按下的值).
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT] and not keys_pressed[pygame.K_LEFT]:
playerX_change = 0.1
print("Right pressed")
elif keys_pressed[pygame.K_LEFT] and not keys_pressed[pygame.K_RIGHT]:
playerX_change = -0.1
print("Left pressed")
else:
playerX_change = 0
playerX += playerX_change