在我们开始下一篇的内容之前,我们先来聊聊pygame中的事件处理。大家也知道,在一个游戏中,我们要一直监听用户事件,根据相应的事件进行对应的逻辑处理。所以我们游戏的应该是一直处理一个死循环中,知道用户发出退出游戏的事件。
在pygame中pygame.event模块就是用来和事件与队列交互的。首先我们给大家看下这个模块有哪些东西:
在我们的游戏中我们要时时获取事件队列进行处理,那么我们就要使用pygame.event.get()方法来获取事件队列:
pygame.event.get()
描述:get events from the queue
语法:get() -> Eventlist
该方法返回的是一个Eventlist,所以我们需要通过一个for循环来处理每一个事件,因此,我们游戏的主循环代码应该是这样写的:
while True:
for event in pygame.event.get():
do something
在pygame中每一个事件都有对应的事件类型标识,这些都是pygame定义的,我们可以通过这些事件类型来分门别类进行处理,在pygame中,常见的有以下事件类型:
QUIT none
ACTIVEEVENT gain, state
KEYDOWN unicode, key, mod
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
我们这次学习完成的小游戏需要监听键盘事件,所以我们在我们的程序中,我们可以监听KEYDOWN,KEYUP事件,另外一个就是 QUIT 事件,这个事件是用来关闭程序的事件,是必不可少的。
那么我们就实现一下这个事件监听的最基础的形式:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
pass
elif event.type == pygame.KEYUP:
pass
在这里我们处理了3类事件,当然了,我们还没有相应的逻辑 代码。
对于event模块其他的用法我们不做过多了解,等我们需要使用的时候我们在详细说明。
虽然在上面我们判断了事件类型,对于我们的游戏来说,我们需要知道用户按下的是哪个键,才能做出对应的回应。
pygame.key模块是专门用来处理键盘相关事件的,这里我罗列一下按键对应的键码:
KeyASCII ASCII Common Name
K_BACKSPACE \b backspace
K_TAB \t tab
K_CLEAR clear
K_RETURN \r return
K_PAUSE pause
K_ESCAPE ^[ escape
K_SPACE space
K_EXCLAIM ! exclaim
K_QUOTEDBL " quotedbl
K_HASH # hash
K_DOLLAR $ dollar
K_AMPERSAND & ampersand
K_QUOTE quote
K_LEFTPAREN ( left parenthesis
K_RIGHTPAREN ) right parenthesis
K_ASTERISK * asterisk
K_PLUS + plus sign
K_COMMA , comma
K_MINUS - minus sign
K_PERIOD . period
K_SLASH / forward slash
K_0 0 0
K_1 1 1
K_2 2 2
K_3 3 3
K_4 4 4
K_5 5 5
K_6 6 6
K_7 7 7
K_8 8 8
K_9 9 9
K_COLON : colon
K_SEMICOLON ; semicolon
K_LESS < less-than sign
K_EQUALS = equals sign
K_GREATER > greater-than sign
K_QUESTION ? question mark
K_AT @ at
K_LEFTBRACKET [ left bracket
K_BACKSLASH \ backslash
K_RIGHTBRACKET ] right bracket
K_CARET ^ caret
K_UNDERSCORE _ underscore
K_BACKQUOTE ` grave
K_a a a
K_b b b
K_c c c
K_d d d
K_e e e
K_f f f
K_g g g
K_h h h
K_i i i
K_j j j
K_k k k
K_l l l
K_m m m
K_n n n
K_o o o
K_p p p
K_q q q
K_r r r
K_s s s
K_t t t
K_u u u
K_v v v
K_w w w
K_x x x
K_y y y
K_z z z
K_DELETE delete
K_KP0 keypad 0
K_KP1 keypad 1
K_KP2 keypad 2
K_KP3 keypad 3
K_KP4 keypad 4
K_KP5 keypad 5
K_KP6 keypad 6
K_KP7 keypad 7
K_KP8 keypad 8
K_KP9 keypad 9
K_KP_PERIOD . keypad period
K_KP_DIVIDE / keypad divide
K_KP_MULTIPLY * keypad multiply
K_KP_MINUS - keypad minus
K_KP_PLUS + keypad plus
K_KP_ENTER \r keypad enter
K_KP_EQUALS = keypad equals
K_UP up arrow
K_DOWN down arrow
K_RIGHT right arrow
K_LEFT left arrow
K_INSERT insert
K_HOME home
K_END end
K_PAGEUP page up
K_PAGEDOWN page down
K_F1 F1
K_F2 F2
K_F3 F3
K_F4 F4
K_F5 F5
K_F6 F6
K_F7 F7
K_F8 F8
K_F9 F9
K_F10 F10
K_F11 F11
K_F12 F12
K_F13 F13
K_F14 F14
K_F15 F15
K_NUMLOCK numlock
K_CAPSLOCK capslock
K_SCROLLOCK scrollock
K_RSHIFT right shift
K_LSHIFT left shift
K_RCTRL right control
K_LCTRL left control
K_RALT right alt
K_LALT left alt
K_RMETA right meta
K_LMETA left meta
K_LSUPER left Windows key
K_RSUPER right Windows key
K_MODE mode shift
K_HELP help
K_PRINT print screen
K_SYSREQ sysrq
K_BREAK break
K_MENU menu
K_POWER power
K_EURO Euro
好了一个简单的游戏雏形就完成了,下一篇开始我们就开始写我们的小游戏逻辑了。