gpt4 book ai didi

python - 是我还是 pygame.key.get_pressed() 不工作?

转载 作者:太空狗 更新时间:2023-10-30 02:12:14 25 4
gpt4 key购买 nike

好的,所以我正在制作一个基本的 spaceship 游戏。

我无法让旋转工作,因为它扰乱了位图,但这是另一个问题。我应该使用 gif 吗?还有其他文件类型建议吗?

回到正题,所以:

k = pygame.key.get_pressed()

是的,不言自明。这不起作用,因为它会在按下时返回每个键。

所以,在其他地方:

d = k[pygame.K_d]

还有另一行:

print d

还有一个:

if d:

因此,当按下键盘上的每个键时,k 返回。

d 无限期地返回 0,无论 d 是否被按下。

d 始终为 0。

因此关于 d 的陈述永远不会为真。

为什么会这样?

最佳答案

您可能对 get_pressed() 感到困惑实际上是在做。来自文档:

Returns a sequence of boolean values representing the state of every key on the keyboard. Use the key constant values to index the array. A True value means the that button is pressed.

Getting the list of pushed buttons with this function is not the proper way to handle text entry from the user. You have no way to know the order of keys pressed, and rapidly pushed keys can be completely unnoticed between two calls to pygame.key.get_pressed(). There is also no way to translate these pushed keys into a fully translated character value. See the pygame.KEYDOWN events on the event queue for this functionality.

换句话说,当您调用 get_pressed() 时,您将获得键盘状态的表示在调用 get_pressed() 时

例如,假设您在游戏的前一秒调用了 get_pressed()。您将返回一个结构,其中列出了键盘上的所有键以及它们是否被按下(它们都将为 false)。

在游戏开始两秒后,您按下了一个键。如果您查看之前查看的相同结构,它仍然会说没有按下所有内容,因为您仍在查看键盘的状态,就像一秒钟前一样。但是,如果您再次调用 get_pressed(),您会得到一个更新后的新结构,并且这个新结构应该显示按键已按下。

解决此问题的一种方法是执行以下操作:

while True:
# Update Stuff
# Draw Stuff
state = pygame.key.get_pressed()
# Now check the keys

现在,您可以通过键盘获得最新信息。

应该注意的一件事是,使用上述功能,您仍然可能会错过键盘按键。如果更新功能花费了很长时间,则可能会在足够短的时间内按下然后松开某个键,以至于您不会在按下该键时调用 get_pressed()。

如果这可能是个问题,您可能希望改用事件循环。像...

is_moving = False

while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
is_moving = True
elif event.type == pygame.KEYUP and event.key == pygame.K_d:
is_moving = False

关于python - 是我还是 pygame.key.get_pressed() 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17372314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com