pygame键盘事件操作
✕
什么是事件呢?按下键盘某个按键,鼠标移动,包括点击关闭按钮都可以算是事件操作。
pygame中事件模块是pygame.event,官方说法是用于与事件和队列进行交互。
不用学习太多,主要学习下常用即可;
pygame.event.get | 从队列中获取事件 |
---|
之前我们就一直在用事件处理,那就是我们每次代码都带上的退出;
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
如果没有任何输入的情况下 event.get()返回的是个空列表
我们点击关闭pygame的窗口返回的事件是
[<Event(12-Quit {})>]
我们可以 遍历列表获取内部数据,
可以查看数据的类型是否是pygame的某种类型,比如退出
如果是这种类型的话,我们可以执行相对于的操作。
我们来说下键盘操作
elif event.type == pygame.KEYDOWN :
if event.key == pygame.K_UP:
y -= 1
在事件中判断类型是否是 pygame.KEYDOWN
判断键位是否是我们需要的那个键位
执行对应的操作
但是上面这中操作有个问题就是,我们每次按下这个键之后只能执行一次操作;
我们要移动对象的时候想要按下后连续移动,
我们就需要用到 pygame.key 这个是在pygame 2.0的新功能
该模块包含处理键盘的功能。
按下和释放键盘按钮时,事件队列获取pygame.KEYDOWN和pygame.KEYUP事件。两个事件都有一个键属性,它是表示键盘上每个键的整数ID。
该pygame.KEYDOWN事件具有其他属性unicode和 scancode。unicode表示单个字符串,即输入的完全翻译字符。这考虑了移位和组合键。scancode表示特定于平台的密钥代码。这可能与键盘不同,但对于像多媒体键这样的奇怪键的键选择很有用。
pygame.KEYDOWN
。该属性text
包含输入。
有许多键盘常量,它们用于表示键盘上的键。以下是所有键盘常量的列表:
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
键盘还有一个修饰符状态列表,可以通过按位对它们进行组合来组装。
KMOD_NONE, KMOD_LSHIFT, KMOD_RSHIFT, KMOD_SHIFT, KMOD_CAPS,
KMOD_LCTRL, KMOD_RCTRL, KMOD_CTRL, KMOD_LALT, KMOD_RALT,
KMOD_ALT, KMOD_LMETA, KMOD_RMETA, KMOD_META, KMOD_NUM, KMOD_MODE
获取所有键盘按钮的状态
pygame.key.get_pressed()——返回一系列布尔值,表示键盘上每个键的状态。使用键常量值来索引数组。True值表示按下该按钮。
我们可以判断这个按键是否为真,如果为真则表示按下这个按键
key_list = pygame.key.get_pressed()
if key_list[pygame.K_UP]:
y -= 1
elif key_list[pygame.K_DOWN]:
y += 1
elif key_list[pygame.K_LEFT]:
x -= 1
elif key_list[pygame.K_RIGHT]:
x += 1
这样的话,我们按下某个按键不松开的时候就可以一直移动某个对象了。