返回顶部
首页 > 资讯 > 精选 >Pygame Event事件模块示例分析
  • 679
分享到

Pygame Event事件模块示例分析

2023-06-25 15:06:27 679人浏览 安东尼
摘要

本篇内容介绍了“Pygame Event事件模块示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件(Event)是 Pygame 的

本篇内容介绍了“Pygame Event事件模块示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等等,这些都可以看做是“事件”,Pygame 会接受用户产生的各种操作(或事件),这些操作随时产生,并且操作量可大可小,那么 Pygame 是如何处理这些事件的呢?

事件类型

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

事件类型描述成员属性
QUIT用户按下窗口的关闭按钮none
ATIVEEVENTPygame被激活或者隐藏gain,state
KEYDOWN键盘按下unicode、key、mod
KEYUP键盘放开key、mod
MOUSEMOTioN鼠标移动  pos, rel, buttons
MOUSEBUTTONDOWN鼠标按下 pos, button
MOUSEBUTTONUP鼠标放开 pos, button
JOYAXISMOTION游戏手柄(Joystick or pad) 移动 joy, axis, value
JOYBALLMOTION 游戏球(Joy ball) 移动  joy, axis, value
JOYHATMOTION游戏手柄(Joystick) 移动    joy, axis, value
JOYBUTTONDOWN游戏手柄按下joy, button
JOYBUTTONUP游戏手柄放开    joy, button
VIDEORESIZEPygame窗口缩放  size, w, h
VIDEOEXPOSEPygame窗口部分公开(expose) none
USEREVENT触发一个用户事件  事件代码

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

事件处理方法

Pygame.event 模块提供了处理事件队列的常用方法,如下表所示:

方法说明
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 语句。如下所示:

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 pygameimport sys# 初始化pygamepygame.init()# 定义变量size = width, height = 600, 400bg = (255, 255, 255)# 加载loGo图img = pygame.image.load("C:/Users/Administrator/Desktop/logo.jpg")# 获取图像的位置position = img.get_rect()# 创建一个主窗口screen = pygame.display.set_mode(size)# 标题pygame.display.set_caption("C语言中文网")# 创建游戏主循环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 Event事件模块示例分析

图1:Pygame键盘事件——图像移动

处理鼠标事件

鼠标是计算机最重要外接设备之一,同时它也是游戏玩家必不可少的工具之一。

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

通过一组简单的示例对鼠标事件进行演示,示例代码如下:

程序运行结果如下:

Pygame Event事件模块示例分析

图2:Pygame鼠标事件——鼠标移动

“Pygame Event事件模块示例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Pygame Event事件模块示例分析

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

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

猜你喜欢
  • Pygame Event事件模块示例分析
    本篇内容介绍了“Pygame Event事件模块示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件(Event)是 Pygame 的...
    99+
    2023-06-25
  • Pygame Event事件模块的详细示例
    目录事件类型事件处理方法处理键盘事件处理鼠标事件事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触...
    99+
    2024-04-02
  • Python之Pygame的Event事件模块
    目录Pygame的Event事件模块 事件类型事件处理方法 处理键盘事件处理鼠标事件Pygame的Event事件模块 事件(Event)是 Pygame 的重要模...
    99+
    2023-05-14
    Python Pygame的Event事件模块 Pygame Event事件模块
  • Python之Pygame的Event事件模块怎么使用
    Pygame的Event事件模块事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。 事件类型Pyg...
    99+
    2023-05-18
    Python Pygame event
  • javascript事件循环event loop的示例分析
    小编给大家分享一下javascript事件循环event loop的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:js是单线程的,但是event loop的出现,使得js...
    99+
    2024-04-02
  • firefox中event事件处理的示例分析
    这篇文章给大家分享的是有关firefox中event事件处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在用angularJs实现一个功能,点击后获取event的x,...
    99+
    2024-04-02
  • Angular4.x Event中DOM事件和自定义事件的示例分析
    这篇文章给大家分享的是有关Angular4.x Event中DOM事件和自定义事件的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Angular组件和DOM元素通过事件与...
    99+
    2024-04-02
  • python模块的示例分析
    小编给大家分享一下python模块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传...
    99+
    2023-06-14
  • JS中的事件对象Event实例分析
    这篇文章主要讲解了“JS中的事件对象Event实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS中的事件对象Event实例分析”吧!一、什么是事件对...
    99+
    2024-04-02
  • JavaScript模块模式的示例分析
    这篇文章主要介绍了JavaScript模块模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:在JS中没有Class的概念...
    99+
    2024-04-02
  • angular2模块和共享模块的示例分析
    这篇文章主要介绍angular2模块和共享模块的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!创建模块,用到了共享模块PostSharedModule,共享模块里面包含了2个...
    99+
    2024-04-02
  • JavaScript模块化的示例分析
    小编给大家分享一下JavaScript模块化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 浏览器支持使用JavaScript 模块依赖于 impo...
    99+
    2023-06-15
  • Python模块cachetools的示例分析
    Python模块cachetools的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言cachetools 是一个 Python 模块,提供各种记忆集合和修饰符,包括...
    99+
    2023-06-02
  • JS中事件绑定、事件流模型的示例分析
    小编给大家分享一下JS中事件绑定、事件流模型的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一、JS事件(一...
    99+
    2024-04-02
  • Python中os模块和shutil模块的示例分析
    这篇文章将为大家详细讲解有关Python中os模块和shutil模块的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth...
    99+
    2023-06-06
  • Angular根模块与特性模块的示例分析
    这篇文章主要介绍Angular根模块与特性模块的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前提是安装了 Angular cli,以下的大部分文件创建都是依赖于cli提供的指令Angular中的特性模板和根...
    99+
    2023-06-14
  • python中OS模块和time模块的示例分析
    这篇文章将为大家详细讲解有关python中OS模块和time模块的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、OS模块概述Python OS模块包含普遍的操作系统功能。如果你希望你的程序能够...
    99+
    2023-06-15
  • Angular2 PrimeNG分页模块的示例分析
    小编给大家分享一下Angular2 PrimeNG分页模块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Angular...
    99+
    2024-04-02
  • vuex与模块化的示例分析
    这篇文章将为大家详细讲解有关vuex与模块化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。示例教程例子是在vue-cli基础上构建的,以下是src文件下的内容目...
    99+
    2024-04-02
  • webpack组织模块的示例分析
    这篇文章将为大家详细讲解有关webpack组织模块的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在前端用Webpack打包JS和其它文件已经是主流了,加上No...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作