首页 > 编程知识 正文

pygame.event,pygame自定义事件

时间:2023-05-05 03:13:11 阅读:244556 作者:499

上一篇:pygame教程实例(二)模拟三体
下一篇:pygame教程实例(四)小球弹跳(事件)

本教程使用python3

在pygame教程实例(一)小球弹跳中我们写了一个小球在重力的作用下反复弹跳。
但是游戏最重要的一点是玩家与游戏的交互(通过鼠标、键盘、手柄等设备)。

一、什么是事件

点击鼠标、移动鼠标、滑动滚轮、按下键盘等都是事件。
不过,点击鼠标其实不是一个事件,而是两个事件(按下鼠标,松开鼠标),按下键盘按键也是一样的

二、事件获取

pygame会把事件放到一个队列里,程序从队列里读取事件并进行相应的处理。当然你也可以不处理,但读取事件是必须的,不然这个队列就满了,然后你的程序会卡住。

1.读取事件

使用pygame.event.get()读取队列里所有事件并清空队列。
我们使用for循环来遍历事件

for event in pygame.event.get(): # event 是一个事件对象 # event.type 是事件类型

那么event.type有哪些呢

事件类型产生途径参数QUIT用户按下关闭按钮noneATIVEEVENTPygame被激活或者隐藏gain, stateKEYDOWN键盘被按下unicode, key, modKEYUP键盘被放开key, modMOUSEMOTION鼠标移动pos, rel, buttonsMOUSEBUTTONDOWN鼠标按下pos, buttonMOUSEBUTTONUP鼠标放开pos, buttonJOYAXISMOTION游戏手柄(Joystick or pad)移动joy, axis, valueJOYBALLMOTION游戏球(Joy ball)移动joy, axis, valueJOYHATMOTION游戏手柄(Joystick)移动joy, axis, valueJOYBUTTONDOWN游戏手柄按下joy, buttonJOYBUTTONUP游戏手柄放开joy, buttonVIDEORESIZEPygame窗口缩放size, w, hVIDEOEXPOSEPygame窗口部分公开(expose)?noneUSEREVENT触发了一个用户事件code2.处理事件

先看这个事件类型QUIT
QUIT是pygame里的一个常量,我们必须先导入

import pygamefrom pygame.locals import *

当用户点击关闭按钮(就是窗口右上角的那个叉叉)就会触发这个事件。
代码如下

for event in pygame.event.get():if event.type == QUIT:exit()

也许你希望点击关闭按钮后给用户弹一个框,询问是否退出。

def my_exit():# 在这里弹窗# 不过pygame里似乎没有弹窗# 你可以在窗口里画一个弹窗for event in pygame.event.get():if event.type == QUIT:my_exit()

然后是键盘事件

for event in pygame.event.get():if event.type == QUIT:exit()if event.type == KEYDOWN: # KEYDOWN 按键被按下if event.key == K_ESCAPE:print('你按下了Esc键,准备退出')exit()if event.key == K_LEFT or event.key == K_a:# K_LEFT:左方向键# K_a:A键print('向左移动')if event.key in [K_RIGHT, K_d]:print('向右运动')if event.key == K_SPACE:print('按下了空格键')elif event.type == KEYUP: # KEYUP 按键被松开if event.key in [K_LEFT, K_a]:print('停止向左移动')

还有鼠标事件

for event in pygame.event.get():if event.type == QUIT:exit()if event.type == KEYDOWN: # KEYDOWN 按键被按下passelif event.type == KEYUP: # KEYUP 按键被松开passelif event.type == MOUSEBUTTONDOWN: # 鼠标左键被按下print('点击的坐标是',event.pos)# event.pos 元组,点击位置的x,y坐标# 窗口左上角坐标为 (0,0)

按键大全:

KeyASCIIASCII描述K_BACKSPACEb退格键(Backspace)K_TABt制表键(Tab)K_CLEAR清楚键(Clear)K_RETURNr回车键(Enter)K_PAUSE暂停键(Pause)K_ESCAPE^[退出键(Escape)K_SPACE空格键(Space)K_EXCLAIM!感叹号(exclaim)K_QUOTEDBL"双引号(quotedbl)K_HASH#井号(hash)K_DOLLAR$美元符号(dollar)K_AMPERSAND&and 符号(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_000K_111K_222K_333K_444K_555K_666K_777K_888K_999K_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 符号(at)K_LEFTBRACKET[左中括号(left bracket)K_BACKSLASH反斜杠(backslash)K_RIGHTBRACKET]右中括号(right bracket)K_CARET^脱字符(caret)K_UNDERSCORE_下划线(underscore)K_BACKQUOTE`重音符(grave)K_aaaK_bbbK_cccK_dddK_eeeK_fffK_gggK_hhhK_iiiK_jjjK_kkkK_lllK_mmmK_nnnK_oooK_pppK_qqqK_rrrK_sssK_tttK_uuuK_vvvK_wwwK_xxxK_yyyK_zzzK_DELETE删除键(delete)K_KP00(小键盘)K_KP11(小键盘)K_KP22(小键盘)K_KP33(小键盘)K_KP44(小键盘)K_KP55(小键盘)K_KP66(小键盘)K_KP77(小键盘)K_KP88(小键盘)K_KP99(小键盘)K_KP_PERIOD.句号(小键盘)K_KP_DIVIDE/除号(小键盘)K_KP_MULTIPLY*乘号(小键盘)K_KP_MINUS-减号(小键盘)K_KP_PLUS+加号(小键盘)K_KP_ENTERr回车键(小键盘)K_KP_EQUALS=等于号(小键盘)K_UP向上箭头(up arrow)K_DOWN向下箭头(down arrow)K_RIGHT向右箭头(right arrow)K_LEFT向左箭头(left arrow)K_INSERT插入符(insert)K_HOMEHome 键(home)K_ENDEnd 键(end)K_PAGEUP上一页(page up)K_PAGEDOWN下一页(page down)K_F1F1K_F2F2K_F3F3K_F4F4K_F5F5K_F6F6K_F7F7K_F8F8K_F9F9K_F10F10K_F11F11K_F12F12K_F13F13K_F14F14K_F15F15K_NUMLOCK数字键盘锁定键(numlock)K_CAPSLOCK大写字母锁定键(capslock)K_SCROLLOCK滚动锁定键(scrollock)K_RSHIFT右边的 shift 键(right shift)K_LSHIFT左边的 shift 键(left shift)K_RCTRL右边的 ctrl 键(right ctrl)K_LCTRL左边的 ctrl 键(left ctrl)K_RALT右边的 alt 键(right alt)K_LALT左边的 alt 键(left alt)K_RMETA右边的元键(right meta)K_LMETA左边的元键(left meta)K_LSUPER左边的 Window 键(left windows key)K_RSUPER右边的 Window 键(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)

下一篇我们重写一下小球弹跳,使我们能控制小球运动

上一篇:pygame教程实例(二)模拟三体
下一篇:pygame教程实例(四)小球弹跳(事件)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。