【Python】【进阶篇】八、Pygame的Event事件模块

这篇具有很好参考价值的文章主要介绍了【Python】【进阶篇】八、Pygame的Event事件模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

八、Pygame的Event事件模块

事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。

8.1 事件类型

Pygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。下述表格列出了 Pygame 中常用的游戏事件:

名称 说明
QUIT 用户按下窗口的关闭按钮
ATIVEEVENT Pygame被激活或者隐藏
KEYDOWN 键盘按下
KEYUP 键盘放开
MOUSEMOTION 鼠标移动
MOUSEBUTTONDOWN 鼠标按下
MOUSEBUTTONUP 鼠标放开
JOYAXISMOTION 游戏手柄(Joystick or pad) 移动
JOYBALLMOTION  游戏球(Joy ball) 移动
JOYHATMOTION 游戏手柄(Joystick) 移动
JOYBUTTONDOWN 游戏手柄按下
JOYBUTTONUP 游戏手柄放开
VIDEORESIZE Pygame窗口缩放
VIDEOEXPOSE Pygame窗口部分公开(expose)
USEREVENT 触发一个用户事件

注意,当使用 Pygame 做游戏开发时,上述事件并非都会应用的到,因此在学习的过程中,我们要懂得触类旁通、举一反三。

8.2 事件处理方法

名称 说明
pygame.event.get() 从事件队列中获取一个事件,并从队列中删除该事件
pygame.event.wait()  阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked()  控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.set_allowed()   控制哪些事件允许进入队列
pygame.event.pump()  调用该方法后,Pygame 会自动处理事件队列
pygame.event.poll()  会根据实际情形返回一个真实的事件,或者一个None
pygame.event.peek()   检测某类型事件是否在队列中
pygame.event.clear() 从队列中清除所有的事件
pygame.event.get_blocked()  检测某一类型的事件是否被禁止进入队列
pygame.event.post()   放置一个新的事件到队列中
pygame.event.Event()   创建一个用户自定义的新事件

当我们使用 Pygame 处理事件时,逻辑一般都是相似的。首先是判断事件的类型,然后根据不同的事件操作,执行不同的游戏操作。因此这种情况非常适合使用 if … else 语句。如下所示:

import pygame

while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        print('鼠标按下', event.pos)
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠标弹起')
    if event.type == pygame.MOUSEMOTION:
        print('鼠标移动')
        # 键盘事件
    if event.type == pygame.KEYDOWN:
        # 打印按键的英文字符
        print('键盘按下', chr(event.key))
    if event.type == pygame.KEYUP:
        print('键盘弹起')

8.3 处理键盘事件

键盘事件提供了一个 key 属性,通过该属性可以获取键盘的按键。Pygame 将键盘上的字母键、数字键、组合键等按键以常量的方式进行了定义,下表列出了部分常用按键的常量:

名称 说明
K_BACKSPACE 退格键(Backspace)
K_TAB 制表键(Tab)
K_CLEAR 清除键(Clear)
K_RETURN 回车键(Enter)
K_PAUSE 暂停键(Pause)
K_ESCAPE 退出键(Escape)
K_SPACE 空格键(Space)
K_0...K_9 0…9
K_a...Kz a…z
K_DELETE 删除键(delete)
K_KP0...K_KP9 0(小键盘)…9(小键盘)
K_F1...K_F15 F1…F15
K_UP 向上箭头(up arrow)
K_DOWN 向下箭头(down arrow)
K_RIGHT 向右箭头(right arrow)
K_LEFT 向左箭头(left arrow)
KMOD_ALT 同时按下Alt键

下面通过“图片移动”示例来了解键盘事件的处理过程,如下所示:文章来源地址https://www.toymoban.com/news/detail-669900.html

import pygame
import sys

# 初始化pygame
pygame.init()
# 定义变量
size = width, height = 600, 400
bg = (255, 255, 255)
# 加载logo图
img = pygame.image.load("./python.png")
# 获取图像的位置
position = img.get_rect()
# 创建一个主窗口
screen = pygame.display.set_mode(size)
# 标题
pygame.display.set_caption("Python自学网")
# 创建游戏主循环
while True:
    # 设置初始值
    site = [0, 0]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 图像移动 KEYDOWN 键盘按下事件
        # 通过 key 属性对应按键
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                site[1] -= 8
            if event.key == pygame.K_DOWN:
                site[1] += 8
            if event.key == pygame.K_LEFT:
                site[0] -= 8
            if event.key == pygame.K_RIGHT:
                site[0] += 8
    # 移动图像
    position = position.move(site)
    # 填充背景
    screen.fill(bg)
    # 放置图片
    screen.blit(img, position)
    # 更新显示界面
    pygame.display.flip()

8.4 处理鼠标事件

Pygame 提供了三个鼠标事件,分别是鼠标移动(MOUSEMOTION)、鼠标按下(MOUSEBUTTONDOWN)、鼠标释放(MOUSEBUTTONUP),不同事件类型对应着不同的成员属性。如下所示:

pygame.event.MOUSEMOTION鼠标移动事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.rel 鼠标相对运动距离(X,Y),相对于上次事件
    event.buttons 鼠标按钮初始状态(0,0,0),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1

pygame.event.MOUSEBUTTONUP鼠标键释放事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3

pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件

    event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)
    event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5
import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450, 400))
pygame.display.set_caption("Python自学网")
# 更新显示
pygame.display.flip()
while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")
    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 获取鼠标当前位置
        print('鼠标按下', event.pos)
        mx, my = event.pos
        # 调用 pygame.draw 模块画圆
        pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠标弹起')
        pass
    if event.type == pygame.MOUSEMOTION:
        print('鼠标移动')
        mx, my = event.pos
        # 随机生成 RGB 颜色值
        r = randint(0, 255)
        g = randint(0, 255)
        b = randint(0, 255)
        pygame.draw.circle(screen, (r, g, b,), (mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()

到了这里,关于【Python】【进阶篇】八、Pygame的Event事件模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python模块: pygame(自己动手写游戏)

    目录 一、pygame的安装  二、pygame基础操作 1.基本窗体设置 2.surface组件  3.event事件 一、pygame的安装 在pycharm 左下角的终端上输入指令pip install pygame,按下回车键执行下载,推荐下载到虚拟环境上,即路径前方带有(venv)。或者不使用pycharm,在控制窗口输入执行该命令也可以(控

    2024年03月21日
    浏览(39)
  • python安装pygame模块可能问题解决

    一般我们添加python中模块有两种方法 1、 在开发软件pycharm中文件中设置-项目 然后点击加号,输入自己要安装的模块,如pygame 但是我这种安装存在可能安装失败,但是简单 第二种就是用系统cmd命令进行安装 win+R打开cmd,先输入pip install wheel安装wheel工具,检查pip是不是最新版

    2024年02月12日
    浏览(39)
  • 【Python】【进阶篇】十一、Pygame的精灵和碰撞检测

    精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。 精灵有个特点就是允许精灵之间进行交互,也称之为碰撞,而碰撞检测,指的就是检测两个精灵

    2024年02月13日
    浏览(31)
  • 【Python】【进阶篇】五、Pygame的Transform图像变形

    pygame.transform 模块允许您对加载、创建后的图像进行一系列操作,比如调整图像大小、旋转图片等操作,常用方法如下所示: 名称 说明 pygame.transform.scale() 将图片缩放至指定的大小,并返回一个新的 Surface 对象。 pygame.transform.rotate() 将图片旋转至指定的角度。 pygame.transform.

    2024年02月02日
    浏览(48)
  • 【Python】【进阶篇】十、Pygame的Font文本和字体

    Pygame 通过 pygame.font 模块来创建一个字体对象,从而实现绘制文本的目的。 该模块的常用方法如下所示: 名称 说明 pygame.font.init() 初始化字体模块 pygame.font.quit()  取消初始化字体模块 pygame.font.get_init()  检查字体模块是否被初始化,返回一个布尔值。 pygame.font.get_default_font

    2024年02月07日
    浏览(31)
  • Python学习之pygame模块介绍并制作代码雨

    对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制窗口,反馈键盘鼠标信息,播放音频文件,渲染图片文字等等功能。 今天咱们通过pygame模块实现一个代码雨的简单示例,顺便讲解下子模块中

    2024年02月10日
    浏览(48)
  • Python pygame(GUI编程)模块最完整教程(5)

    上一篇文章:Python pygame(GUI编程)模块最完整教程(4)_pygame绘制圆角矩形_Python-ZZY的博客-CSDN博客   总目录: README.md · Python-ZZY/Python-Pygame最完整教程 - Gitee.com 参考资料:pygame.display — pygame-ce v2.3.1 documentation pg.display.set_mode方法用于创建窗口。 size参数指定窗口的大小,一般是

    2024年02月14日
    浏览(38)
  • Python pygame(GUI编程)模块最完整教程(2)

    上一篇文章: Python pygame(GUI编程)模块最完整教程(1)_pygame模块详解_Python-ZZY的博客-CSDN博客 总目录: README.md · Python-ZZY/Python-Pygame最完整教程 - Gitee.com 参考资料:pygame.font — pygame-ce v2.4.0 documentation pygame中绘制文字的第一步是载入字体。载入字体的方式通常有两种,第一种是

    2024年02月04日
    浏览(36)
  • Python pygame(GUI编程)模块最完整教程(1)

    提示:下滑文章左侧可以查看目录!本教程分为多篇,总目录如下。  总目录: README.md · Python-ZZY/Python-Pygame最完整教程 - Gitee.com pygame是python中一个流行的GUI编程模块,是专门为了开发游戏而设计的。这是一个第三方模块,是SDL和Python的接口。 pygame的最新官网是:https://pyg

    2024年02月02日
    浏览(30)
  • Python pygame(GUI编程)模块最完整教程(4)

    上一篇文章: Python pygame(GUI编程)模块最完整教程(3)_pygame教程pdf_Python-ZZY的博客-CSDN博客 总目录: README.md · Python-ZZY/Python-Pygame最完整教程 - Gitee.com 参考资料:pygame.draw — pygame-ce v2.4.0 documentation draw模块提供了一些直接在表面上绘制常用图形的操作,如绘制矩形、圆形、多

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包