Pygame - 在按下某个键时尝试切换BOOL,而不是在按下时切换BOOL

时间:2013-08-28 05:28:40

标签: python boolean toggle pygame

我试图在没有按下按键的情况下进行BOOL切换,因为只要按住按键,它就会使每个帧都关闭和打开(true和false)。

这是我的小切换代码

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

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

3 个答案:

答案 0 :(得分:0)

您需要切换KEYDOWNKEYUP个事件。

答案 1 :(得分:0)

那么,按下按钮时这个布尔值会改变,对吗? 只需使用KEYUP事件并反转变量:

if event == KEYUP:
    if event.key == DESIRED_KEY:
        boolVar = not boolVar

答案 2 :(得分:0)

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

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

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

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

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事件模块文档中提到)。