事件处理的时机
在程序主循环开始,我们获取事件并进行处理:
# 主循环
while True:# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()# 绘制更新图形 screen.fill(black)screen.blit(ball, ballrect)pygame.display.flip()
事件类型
事件类型有很多种,例如: QUIT 和 MOUSEMOTION 等, 这些预定义的事件类型作为常量定义在 pygame.local 模块中,下面这些是最早的事件类型和它们的属性,后面不同的版本又补充了例如手势等事件,具体参考官方文档:
QUIT none
ACTIVEEVENT gain, state
KEYDOWN key, mod, unicode, scancode
KEYUP key, mod
MOUSEMOTION pos, rel, buttons
MOUSEBUTTONUP pos, button
MOUSEBUTTONDOWN pos, button
JOYAXISMOTION joy, axis, value
JOYBALLMOTION joy, ball, rel
JOYHATMOTION joy, hat, value
JOYBUTTONUP joy, button
JOYBUTTONDOWN joy, button
VIDEORESIZE size, w, h
VIDEOEXPOSE none
USEREVENT code
事件处理模式
我们这里基本的事件处理模式:
# 主循环
while True:# 事件处理for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()# 处理鼠标按下事件if event.type == pygame.MOUSEBUTTONDOWN:print("鼠标按键", event)# 处理鼠标释放if event.type == pygame.MOUSEBUTTONUP:print("鼠标t弹起", event)# 处理鼠标移动if event.type == pygame.MOUSEMOTION:print("鼠标移动", event)# 处理按键if event.type == pygame.KEYDOWN:if event.key == pygame.K_RETURN:print("键盘按键", event)# 另一种处理按键的方式pressedKeys = pygame.key.get_pressed()# print("pressed keys is ", pressedKeys)# 具体某个按键的处理if (pressedKeys[pygame.K_LEFT]):print("Key Left is pressed")