iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python之Pygame的Event事件模块怎么使用
  • 911
分享到

Python之Pygame的Event事件模块怎么使用

PythonPygameevent 2023-05-18 11:05:37 911人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

Pygame的Event事件模块

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

事件类型

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

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

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

事件处理方法

名称说明
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('键盘弹起')

处理键盘事件

我们可以使用键盘事件提供的 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_90…9
K_a...Kza…z
K_DELETE删除键(delete)
K_KP0...K_KP90(小键盘)…9(小键盘)
K_F1...K_F15F1…F15
K_UP向上箭头(up arrow)
K_DOWN向下箭头(down arrow)
K_RIGHT向右箭头(right arrow)
K_LEFT向左箭头(left arrow)
KMOD_ALT同时按下Alt键

下面通过“图片移动”示例来了解键盘事件的处理过程,如下所示:

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

处理鼠标事件

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事件模块怎么使用的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Python之Pygame的Event事件模块怎么使用

本文链接: https://www.lsjlt.com/news/211952.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python之Pygame的Event事件模块怎么使用
    Pygame的Event事件模块事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。 事件类型Pyg...
    99+
    2023-05-18
    Python Pygame event
  • Python之Pygame的Event事件模块
    目录Pygame的Event事件模块 事件类型事件处理方法 处理键盘事件处理鼠标事件Pygame的Event事件模块 事件(Event)是 Pygame 的重要模...
    99+
    2023-05-14
    Python Pygame的Event事件模块 Pygame Event事件模块
  • Pygame Event事件模块的详细示例
    目录事件类型事件处理方法处理键盘事件处理鼠标事件事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触...
    99+
    2024-04-02
  • Pygame Event事件模块示例分析
    本篇内容介绍了“Pygame Event事件模块示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件(Event)是 Pygame 的...
    99+
    2023-06-25
  • Python之datetime模块怎么使用
    这篇文章主要讲解了“Python之datetime模块怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python之datetime模块怎么使用”吧!1、日期时间对象日期时间对象是指具...
    99+
    2023-07-02
  • Pygame中Font模块怎么用
    小编给大家分享一下Pygame中Font模块怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!文本是任何一款游戏中不可或缺的重要要素之一,Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的...
    99+
    2023-06-21
  • Node.js中的events事件模块怎么使用
    本篇内容主要讲解“Node.js中的events事件模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中的events事件模块怎么使用”吧...
    99+
    2024-04-02
  • Python基础之模块怎么使用
    这篇文章主要介绍“Python基础之模块怎么使用”,在日常操作中,相信很多人在Python基础之模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python基础之模块怎么使用”的疑惑有所帮助!接下来...
    99+
    2023-07-06
  • Nodejs v14源码分析之如何使用Event模块
    本篇内容主要讲解“Nodejs v14源码分析之如何使用Event模块”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Nodejs v14源码分析之如何使用Eve...
    99+
    2024-04-02
  • python之logging模块使用
    #!/usr/bin/env python # encoding: utf-8 import logging #定义handler的输出格式 formatter=logging.Formatter('%(asctime)s--%(name)...
    99+
    2023-01-31
    模块 python logging
  • jQuery中event事件怎么用
    这篇文章主要为大家展示了“jQuery中event事件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery中event事件怎么用”这篇文章吧。1.p...
    99+
    2024-04-02
  • python爬虫之selenium模块怎么使用
    这篇文章主要介绍了python爬虫之selenium模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python爬虫之selenium模块怎么使用文章都会有所收获,下面我们一起来看看吧。一、什么是Se...
    99+
    2023-06-30
  • Pygame Display显示模块的使用方法
    Pygame 使用pygame.display显示模块中的方法创建游戏的主窗口: screen = pygame.display.set_mode(size=(),flags=...
    99+
    2024-04-02
  • Python常用标准库之os模块与shutil模块怎么使用
    本文小编为大家详细介绍“Python常用标准库之os模块与shutil模块怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python常用标准库之os模块与shutil模块怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-30
  • 教你使用Python的pygame模块实现拼图游戏
    目录pygame介绍安装pygamepygame常用模块pygame入门案例pygame实现拼图游戏总结pygame介绍 Python Pygame 是一款专门为开发和设计 2D 电...
    99+
    2024-04-02
  • 怎么使用Node.js的内置模块event实现发布订阅模式
    这篇文章主要介绍了怎么使用Node.js的内置模块event实现发布订阅模式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Node.js的内置模块event实现发布订阅...
    99+
    2024-04-02
  • Python怎么使用模块
    这篇文章给大家分享的是有关Python怎么使用模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.1 导入模块import 模块名form 模块名import 功能名form 模块名 import *impor...
    99+
    2023-06-22
  • 怎么理解MySQL的EVENT事件
    这篇文章主要介绍“怎么理解MySQL的EVENT事件”,在日常操作中,相信很多人在怎么理解MySQL的EVENT事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My...
    99+
    2024-04-02
  • python的xlrd模块怎么使用
    这篇文章主要介绍“python的xlrd模块怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python的xlrd模块怎么使用”文章能帮助大家解决问题。xlrd是python语言中用于读取ex...
    99+
    2023-06-27
  • python标准库模块之json库怎么使用
    今天小编给大家分享一下python标准库模块之json库怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言json,...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作