0

我正在尝试在按下键时进行 BOOL 切换,而不是在按下键时,它只会在每帧中切换和切换(真和假)。

这是我的小切换代码

if key[pygame.K_z] and robsHouse.pressed == False:
        robsHouse.pressed = True
    elif key[pygame.K_z] and robsHouse.pressed == True:
        robsHouse.pressed = False

任何想法都会有所帮助,谢谢。

4

3 回答 3

1

所以,只要按下按钮,这个布尔值就会改变,对吗?只需使用KEYUP事件并反转变量:

if event == KEYUP:
    if event.key == DESIRED_KEY:
        boolVar = not boolVar
于 2013-08-28T10:43:22.357 回答
0

您需要打开KEYDOWNKEYUP事件。

于 2013-08-28T05:46:41.037 回答
0

您的代码robsHouse.pressed在按住键时切换每一帧的原因是因为在按住键时key[pygame.K_z]每次循环迭代都会满足条件,然后次要条件将在交替帧上相互满足。

在不改变检索关键数据的方式的情况下,您可以执行以下操作:

if key[pygame.K_z]:
    robsHouse.pressed = True
else:
    robsHouse.pressed = False

另一种方法是从 pygame 的事件模块中查找KEYUP和事件,而不是从关键模块中获取关键数据。KEYDOWN可以这样做:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_z:
            robsHouse.pressed = True
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_z:
            robsHouse.pressed = False

就个人而言,在大多数情况下,我更喜欢第二种方法。无论如何,您都需要处理来自 pygame 事件模块的事件,否则队列将填满,您的程序将变得无响应(这在 pygame 事件模块文档中有所提及)。

于 2013-08-28T19:07:27.487 回答