pygame判断鼠标左键

您所在的位置:网站首页 pygame鼠标控制物体移动 pygame判断鼠标左键

pygame判断鼠标左键

2023-11-05 10:48| 来源: 网络整理| 查看: 265

这节介绍如何在PyGame中,获取键盘和鼠标信息。并通过这些信息控制图元的运动。从而实现人机交互效果。

PyGame支持多种输入设备。键盘、鼠标和游戏操纵杆都支持,这里主要介绍键盘的使用。

01.输入设备响应模式

键盘和鼠标都有两种输入响应模式。一种是状态响应模式,另一种是缓冲区轮询模式。举个例子来描述这两种模式的区别。假如我们按下A键,屏幕就打印输出字母‘A’。如果分别用这两种方式实现。效果是这样的。

按下键盘‘A’键状态响应屏幕只输出一个‘A’缓冲区轮询只要不松开,屏幕会输出无数个‘A’

状态事件响应模式:指的是按键的按下“DOWN”和释放‘UP’两种状态。这个事件状态只会激活响应一次。不会无休止响应,除非状态改变。

状态缓冲区轮询:系统会把所有按键状态存在一块缓冲区内。只要按下某个键。它对应的键值就一直是‘PRESS’状态。只要这个按键的状态没有改变。这个状态事件会一直触发。

状态事件响应模式适合实现按钮的响应设计。比如按下一个按钮就只会做出一个响应,而不会连续响应;状态缓冲区轮询适合实时交互响应,比如移动物品,子弹发射等。按下发射按钮,只要不松开,子弹一直发射。

02.键盘设备的状态事件响应模式

#包含pygame模块import pygame #包含pygame.locals模块import pygame.locals #包含sys系统操作模块import sys #初始化pygamepygame.init() #设置应用程序窗口大小canvas2d = pygame.display.set_mode((800,600)) #设置应用程序窗口标签名称pygame.display.set_caption('键盘状态事件响应程序') #开启游戏循环while True: #轮询窗口事件 for event in pygame.event.get(): #如果获得关闭程序事件 if event.type== pygame.locals.QUIT: pygame.quit() #退出pygame sys.exit() #销毁程序 if event.type == pygame.KEYUP: #当松开键盘时显示松开键值和状态 print(str(event.key) + 'key up') elif event.type == pygame.KEYDOWN: #当按下键盘时显示按下键值和状态 print(str(event.key) + 'key down') #窗口显示内容更新 pygame.display.update()

event.key参数是按下键盘的值,event.type代表按键的状态。按下是KEYDOWN,松开是KEYUP。

按键对应event.key的值如下表:

KeyASCII ASCII Common NameK_BACKSPACE \b backspaceK_TAB \t tabK_CLEAR clearK_RETURN \r returnK_PAUSE pauseK_ESCAPE ^[ escapeK_SPACE spaceK_EXCLAIM ! exclaimK_QUOTEDBL " quotedblK_HASH # hashK_DOLLAR $ dollarK_AMPERSAND & ampersandK_QUOTE quoteK_LEFTPAREN ( left parenthesisK_RIGHTPAREN ) right parenthesisK_ASTERISK * asteriskK_PLUS + plus signK_COMMA , commaK_MINUS - minus signK_PERIOD . periodK_SLASH / forward slashK_0 0 0K_1 1 1K_2 2 2K_3 3 3K_4 4 4K_5 5 5K_6 6 6K_7 7 7K_8 8 8K_9 9 9K_COLON : colonK_SEMICOLON ; semicolonK_LESS < less-than signK_EQUALS = equals signK_GREATER > greater-than signK_QUESTION ? question markK_AT @ atK_LEFTBRACKET [ left bracketK_BACKSLASH \ backslashK_RIGHTBRACKET ] right bracketK_CARET ^ caretK_UNDERSCORE _ underscoreK_BACKQUOTE ` graveK_a a aK_b b bK_c c cK_d d dK_e e eK_f f fK_g g gK_h h hK_i i iK_j j jK_k k kK_l l lK_m m mK_n n nK_o o oK_p p pK_q q qK_r r rK_s s sK_t t tK_u u uK_v v vK_w w wK_x x xK_y y yK_z z zK_DELETE deleteK_KP0 keypad 0K_KP1 keypad 1K_KP2 keypad 2K_KP3 keypad 3K_KP4 keypad 4K_KP5 keypad 5K_KP6 keypad 6K_KP7 keypad 7K_KP8 keypad 8K_KP9 keypad 9K_KP_PERIOD . keypad periodK_KP_DIVIDE / keypad divideK_KP_MULTIPLY * keypad multiplyK_KP_MINUS - keypad minusK_KP_PLUS + keypad plusK_KP_ENTER \r keypad enterK_KP_EQUALS = keypad equalsK_UP up arrowK_DOWN down arrowK_RIGHT right arrowK_LEFT left arrowK_INSERT insertK_HOME homeK_END endK_PAGEUP page upK_PAGEDOWN page downK_F1 F1K_F2 F2K_F3 F3K_F4 F4K_F5 F5K_F6 F6K_F7 F7K_F8 F8K_F9 F9K_F10 F10K_F11 F11K_F12 F12K_F13 F13K_F14 F14K_F15 F15K_NUMLOCK numlockK_CAPSLOCK capslockK_SCROLLOCK scrollockK_RSHIFT right shiftK_LSHIFT left shiftK_RCTRL right controlK_LCTRL left controlK_RALT right altK_LALT left altK_RMETA right metaK_LMETA left metaK_LSUPER left Windows keyK_RSUPER right Windows keyK_MODE mode shiftK_HELP helpK_PRINT print screenK_SYSREQ sysrqK_BREAK breakK_MENU menuK_POWER powerK_EURO Euro

如果我们要判断是否按下A键,输入以下代码:

if event.key == pygame.K_a: #相应处理指令

这里游戏,按键是不区分大小写的。

03.键盘设备的缓冲区轮询响应模式

在系统内部有一块缓冲区,里面记录了所有键值的状态,按下还是释放。用户通过pygame.key.get_pressed()函数访问缓冲区相应键位才可知道当前状态。

#包含pygame模块import pygame #包含pygame.locals模块import pygame.locals #包含sys系统操作模块import sys #初始化pygamepygame.init() #设置应用程序窗口大小canvas2d = pygame.display.set_mode((800,600)) #设置应用程序窗口标签名称pygame.display.set_caption('hello') #开启游戏循环while True: #轮询窗口事件 for event in pygame.event.get(): #如果获得关闭程序事件 if event.type== pygame.locals.QUIT: pygame.quit() #退出pygame sys.exit() #销毁程序 #注意:这里键盘信息获取是放在for事件轮询外面的 key_buf = pygame.key.get_pressed() if key_buf[pygame.K_a]==1: print('key A is press') elif key_buf[pygame.K_b]==1: print('key B is press') #窗口显示内容更新 pygame.display.update()

以上程序运行时,按下A键就输出多行“key A is press”。按下B键就输出多行“key B is press”。为什么是输出多行呢?是因为,只要按键还是按下状态,相对应的处理命令就一直会执行,这个过程是很快的。除非按下状态取消。

b1030491d171e067d508f79d9d02aee0.png

关注我们



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3