我试图在没有按下按键的情况下进行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
任何想法都会有所帮助,谢谢。
答案 0 :(得分:0)
您需要切换KEYDOWN
和KEYUP
个事件。
答案 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的事件模块中查找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事件模块文档中提到)。