Python游戏开发入门:pygame事件处理机制-3

简介: Python游戏开发入门:pygame事件处理机制-3

Pygame事件处理机制简介

• 键盘事件及类型的使用
• 鼠标事件及类型的使用
• Pygame事件处理函数

Pygame事件队列


缓存并派发所有事件
原则上先到先处理
用户对事件逐一处理

Pygame事件

pygame.event.EventType
• 事件本质上是一种封装后的数据类型(对象)
• EventType是Pygame的一个类,表示事件类型
• 事件类型只有属性,没有方法
• 用户可自定义新的事件类型


image.png

image.png

实例:键盘落下事件及属性


pygame.event.KEYDOWN
event.unicode
• event.key
• event.mod

键盘事件及属性


键盘按下事件pygame.event.KEYDOWN
键盘释放事件pygame.event.KEYUP
event.unicode  按键的unicode码,平台有关,不推荐使用
event.key 按键的常量名称
event.mod  按键修饰符的组合值

按键的常量名称


K_BACKSPACE
K_TAB
K_CLEAR
K_RETURN
K_PAUSE
K_ESCAPE
K_SPACE
K_EXCLAIM
K_QUOTEDBL
K_HASH
K_COLON
K_SEMICOLON
K_LESS
K_EQUALS
K_GREATER
K_QUESTION
K_AT
K_LEFTBRACKET
K_BACKSLASH
K_RIGHTBRACKET
K_CARET
K_0
K_1
K_2
K_3
K_4
K_5
K_6
K_7
K_8
K_9
K_DOLLAR
K_AMPERSAND
K_QUOTE
K_LEFTPAREN
K_RIGHTPAREN
K_ASTERISK
K_PLUS
K_COMMA
K_MINUS
K_PERIOD
K_SLASH
K_UNDERSCORE
K_BACKQUOTE
K_DELETE
K_UP
K_DOWN
K_RIGHT
K_LEFT
K_INSERT
K_HOME
K_END
K_KP0
K_KP1
K_KP2
K_KP3
K_KP4
K_KP5
K_KP6
K_KP7
K_KP8
K_KP9
K_KP_PERIOD
K_KP_DIVIDE
K_KP_MULTIPLY
K_KP_MINUS
K_KP_PLUS
K_KP_ENTER
K_KP_EQUALS
K_PAGEUP
K_PAGEDOWN
K_NUMLOCK
K_F1
K_F2
K_F3
K_F4
K_F5
K_F6
K_F7
K_F8
K_F9
K_F10
K_F11
K_F12
K_F13
K_F14
K_F15
K_CAPSLOCK
K_SCROLLOCK
K_RSHIFT
K_LSHIFT
K_RCTRL
K_LCTRL
K_RALT
K_LALT
K_RMETA
K_LMETA
K_LSUPER
K_RSUPER
K_MODE
K_HELP
K_PRINT
K_SYSREQ
K_BREAK
K_MENU
K_POWER
K_EURO
K_a
K_b
K_c
K_d
K_e
K_f
K_g
K_h
K_i
K_j
K_k
K_l
K_m
K_n
K_o
K_p
K_q
K_r
K_s
K_t
K_u
K_v
K_w
K_x
K_y
K_z

按键的修饰符


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

修饰符的按位或运算


event.mod = KMOD_ALT | KMOD_SHIFT

鼠标事件及属性


pygame.event.MOUSEMOTION鼠标移动事件
    event.pos 鼠标当前坐标值(x,y),相对于窗口左上角
    event.rel 鼠标相对运动距离(X,Y),相对于上次事件
    event.buttons 鼠标按钮状态(a,b,c),对应于鼠标的三个键
pygame.event.MOUSEBUTTONUP鼠标键释放事件
    event.pos 鼠标当前坐标值(x,y),相对于窗口左上角
    event.button 鼠标按下键编号n取值 0/1/2,分别对应三个键
pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件
    event.pos  鼠标当前坐标值(x,y),相对于窗口左上角
    event.button 鼠标按下键编号n取值为整数,左键为1,右键为3,设备相关

事件处理的重要函数


处理事件
    pygame.event.get(type/typelist) 
    从事件队列中获得事件列表,即获得所有被队列的事件
    pygame.event.poll()  
    从事件队列中获得一个事件,事件获取将从事件队列中删除
    pygame.event.clear(type/typelist)  
    从事件队列中删除事件,默认删除所有事件
    如果事件队列为空,则返回 event.NOEVENT
操作事件队列
    同时仅能存储128个事件当队列满时,更多事件将被丢弃
    设置事件队列能够缓存事件的类型
    pygame.event.set_blocked(type or typelist)  
    控制哪些类型事件不允许被保存到事件队列中
    pygame.event.get_blocked(type) 
    测试某个事件类型是否被事件队列所禁止
    如果事件类型被禁止,则返回True,否则返回False
    pygame.event.set_allowed(type or typelist)
    控制哪些类型事件允许被保存到事件队列中

生成事件


pygame.event.post(Event)
产生一个事件,并将其放入事件队列
一般用于放置用户自定义事件(pygame.USEREVENT)
也可以用于放置系统定义事件(如鼠标或键盘等),给定参数
  pygame.event.Event((type, dict) 创建一个给定类型的事件
其中,事件的属性和值采用字典类型复制,属性名采用字符串形式
如果创建已有事件,属性需要一致

代码示例

处理事件

# -*- coding: utf-8 -*-
# @File    : pygame_demo.py
# @Date    : 2018-05-22
"""
键盘鼠标事件
"""
import pygame, sys
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("pygame游戏之旅")
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 监听键盘按下事件,打印出所按的键位信息
        if event.type == pygame.KEYDOWN:
            if event.unicode =="":
                print("#", event.key, event.mod)
            else:
                print(event.unicode, event.key, event.mod)
        # 监听鼠标事件,打印鼠标位置信息
        elif event.type == pygame.MOUSEMOTION:
            print("MOUSEMOTION", event.pos, event.rel, event.buttons)
        elif event.type == pygame.MOUSEBUTTONDOWN:
            print("MOUSEBUTTONDOWN", event.pos, event.button)
        elif event.type == pygame.MOUSEBUTTONUP:
            print("MOUSEBUTTONUP", event.pos, event.button)
    pygame.display.update()

产生事件

 
         
相关文章
|
4月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
531 7
|
5月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
456 1
|
4月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
4月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
805 1
|
5月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
304 5
|
存储 机器学习/深度学习 编解码
Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)
最近很多读者想学习使用python来制作游戏,其中最经典的工具包就是Pygame ,如果单纯只看之前分享的是个游戏代码案例,直接来制作一款游戏有些难度
2643 0
Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)
|
5月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
411 102
|
5月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
390 104
|
5月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
301 103
|
5月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
227 82

推荐镜像

更多