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()

产生事件


         
相关文章
|
6天前
|
机器学习/深度学习 数据可视化 数据挖掘
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
18 1
|
6天前
|
人工智能 数据挖掘 程序员
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
《Python 简易速速上手小册》第1章:Python 编程入门(2024 最新版)
35 0
|
7天前
|
机器学习/深度学习 数据采集 算法
scikit-learn入门指南:从基础到实践
【4月更文挑战第17天】这篇指南介绍了scikit-learn,一个Python数据分析和机器学习的重要库。内容涵盖安装、数据加载与预处理、模型训练(如KNN分类器)、评估、调参优化及高级应用,如降维和聚类。通过实例展示了scikit-learn在分类任务中的使用,强调其在数据科学中的重要性。要深入了解,可参考官方文档和实践案例。
|
8天前
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
14天前
|
JavaScript 前端开发 API
游戏开发入门:Python后端与Vue前端的协同工作方式
【4月更文挑战第11天】使用Python后端(Flask或Django)和Vue.js前端开发游戏变得流行,能提高开发效率和可维护性。本文指导如何构建这样的项目,包括设置环境、创建虚拟环境、搭建后端API及前端Vue组件,强调前后端协作和API接口的重要性。这种架构促进团队合作,提升代码质量和游戏体验。
|
15天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【4月更文挑战第9天】本文介绍了使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先,简述了机器学习的基本概念和类型。接着,展示了如何安装Python和Scikit-learn,加载与处理数据,选择模型进行训练,以及评估模型性能。通过本文,读者可了解机器学习入门步骤,并借助Python和Scikit-learn开始实践。
|
17天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】

热门文章

最新文章