Pygame事件处理机制简介-慕课的python游戏开发入门02

这篇具有很好参考价值的文章主要介绍了Pygame事件处理机制简介-慕课的python游戏开发入门02。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

首先解释几个问题:

1、事件处理需求主要有以下几个方面:

2、Pygame事件队列

3、Pygame事件

4、事件类型及属性

 5、事件处理的重要函数

 6、键盘事件

7、鼠标事件

8、处理事件函数

9、操作事件队列

10、生成事件

其次给出代码段,有利于大家对其进行学习和分析

最后进行小结:


作为一款游戏,一方面是游戏的内容是否吸引人,另一方面就是作为游戏者参与其中,因此如何与用户互动是需要着重解决的问题,因此第二部分是事件处理机制,也就是上篇中提到的event.type的处理。一般为键盘和鼠标输入,开发高级一点游戏还需要游戏杆,这里主要说一下键盘和鼠标操作的处理。

首先解释几个问题:

1、事件处理需求主要有以下几个方面:

• 响应用户键盘、鼠标等外设操作
• 响应屏幕尺寸和模式变化
• 响应游戏情节的特定触发条件
• 产生一些触发条件
• ……

2、Pygame事件队列

建立的一个队列,用于缓存并派发所有事件
原则上先到先处理

3、Pygame事件

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

4、事件类型及属性

Pygame事件处理机制简介-慕课的python游戏开发入门02

 5、事件处理的重要函数

Pygame事件处理机制简介-慕课的python游戏开发入门02

 6、键盘事件

Pygame事件处理机制简介-慕课的python游戏开发入门02

针对事件类型,例如键盘中按下,然后针对不同的键值和修饰符组合,可以实现多种对游戏的操作反馈,从而实现人对游戏的全面操控,但是基于游戏的可玩性,尽量的减少按键的数量,对于游戏是有益的!

7、鼠标事件

Pygame事件处理机制简介-慕课的python游戏开发入门02

 (1)pygame.event.MOUSEMOTION鼠标移动事件
• event.pos 鼠标当前坐标值(x,y),相对于窗口左上角
• event.rel 鼠标相对运动距离(X,Y),相对于上次事件
• event.buttons 鼠标按钮状态(a,b,c),对应于鼠标的三个键

(2)pygame.event.MOUSEBUTTONUP 鼠标键释放事件
• event.pos 鼠标当前坐标值(x,y),相对于窗口左上角
• event.button 鼠标按下键编号n,取值 0/1/2,分别对应三个键

(3)pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件
• event.pos 鼠标当前坐标值(x,y),相对于窗口左上角
• event.button 鼠标按下键编号n,取值为整数,左键为1,右键为3,设备相关

8、处理事件函数

(1)pygame.event.get()

• 从事件队列中获得事件列表,即获得所有被队列的事件

例如:

for event in pygame.event.get():
        if event.type == pygame.QUIT:
        sys.exit()
• 可以增加参数,获得某类或某些类事件:
pygame.event.get(type)
pygame.event.get(typelist)

(2)pygame.event.poll()

• 从事件队列中获得一个事件

While True:
        event = pygame.event.poll()
• 事件获取将从事件队列中删除
• 如果事件队列为空,则返回 event.NOEVENT

(3)pygame.event.clear()

• 从事件队列中删除事件,默认删除所有事件
• 该函数与pygame.event.get()类似,区别仅是不对事件进行处理
• 可以增加参数,删除某类或某些类事件:
pygame.event.clear(type)
pygame.event.clear(typelist)

9、操作事件队列

pygame.event.set_blocked(type or typelist)

• 控制哪些类型事件不允许被保存到事件队列中

pygame.event.set_allowed(type or typelist)

• 控制哪些类型事件允许被保存到事件队列中

pygame.event.get_blocked(type)

• 测试某个事件类型是否被事件队列所禁止
• 如果事件类型被禁止,则返回True,否则返回False

10、生成事件

pygame.event.post(Event)

• 产生一个事件,并将其放入事件队列
• 一般用于放置用户自定义事件(pygame.USEREVENT)
• 也可以用于放置系统定义事件(如鼠标或键盘等),给定参数

pygame.event.Event(type, dict)

• 创建一个给定类型的事件
• 其中,事件的属性和值采用字典类型复制,属性名采用字符串形式
• 如果创建已有事件,属性需要一致

其次给出代码段,有利于大家对其进行学习和分析

# Unit PYG03: Pygame Wall Ball Game version 8  鼠标型
import pygame,sys

pygame.init()
size = width, height = 600, 400
speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size, pygame.RESIZABLE)  #窗口大小可调

icon = pygame.image.load("PYG03-flower.png")
pygame.display.set_icon(icon)
pygame.display.set_caption("Pygame壁球")
ball = pygame.image.load("PYG02-ball.gif")
ballrect = ball.get_rect()
fps = 300
fclock = pygame.time.Clock()
still = False

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
            elif event.key == pygame.K_DOWN:
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                still = True
        elif event.type == pygame.MOUSEBUTTONUP:
            still = False
            if event.button == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
        elif event.type == pygame.MOUSEMOTION:
            if event.buttons[0] == 1:
                ballrect = ballrect.move(event.pos[0] - ballrect.left, event.pos[1] - ballrect.top)
    if pygame.display.get_active() and not still:
        ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = - speed[0]
        if ballrect.right > width and ballrect.right + speed[0] > ballrect.right:
            speed[0] = - speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = - speed[1]
        if ballrect.bottom > height and ballrect.bottom + speed[1] > ballrect.bottom:
            speed[1] = - speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballrect)
    pygame.display.update()
    fclock.tick(fps)

上面的代码中用到获取事件,处理了关闭、键盘、鼠标、窗口变化等,可以用于分析代码使用

# Unit PYG04: Pygame Event Post
import pygame,sys

pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pygame事件处理")
fps = 1
fclock = pygame.time.Clock()
num = 1

while True:
    uevent = pygame.event.Event(pygame.KEYDOWN, {"unicode": 123, "key":pygame.K_SPACE, "mod":pygame.KMOD_ALT})
    pygame.event.post(uevent)
    num = num + 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.unicode == "":
                print("[KEYDOWN {}]:".format(num), "#", event.key, event.mod)
            else:
                print("[KEYDOWN {}]:".format(num), event.unicode, event.key, event.mod)

    pygame.display.update()
    fclock.tick(fps)

上面的代码段创建和产生事件的操作,可用于学习使用,代码段来源于慕课

最后进行小结:

本文简单的介绍了pygame的事件处理机制。

1、事件的处理需求通俗的讲,就是软件如何应对用户的操作,何种操作对应如何处置,那些需要响应,哪些不需要响应,哪些重点响应,哪些可以等会响应,以及如何响应的问题。

2、事件队列通俗讲就是排队需要解决的问题,一般是后来先处理,但也可以设置不同的处理方式。

3、事件类型是pygame可以处理的类型,并对键盘、鼠标等进行重点解释。这些事件类型是应用于事件处理中的,排在事件队列中,但一般不需要我们管事件队列的处理方式

4、事件处理的重要函数则是对事件进行处理的方法,哪些需要处理,哪些不需要处理,如何处理都是由此处理的,甚至于根据自己需要生成事件进行处理。

注:键盘的常用键值和修饰值一般不需要记忆,用的时候查一下就行了!有点太多了,了解一下就中了!文章来源地址https://www.toymoban.com/news/detail-461277.html

到了这里,关于Pygame事件处理机制简介-慕课的python游戏开发入门02的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python游戏篇:pygame

    pygame专门用于多媒体(如电子游戏开发),其中包含对图像、声音、视频、事件、碰撞等支持, 如果想开发3D游戏,pygame就显得力不从心了,可以看看panda3d。 pygame中的draw模块可以在窗口上绘图如线条、矩形、多边形、圆、椭圆、圆弧等。 pygame中的image模块用来加载图片。

    2024年02月13日
    浏览(34)
  • 【Python】pygame弹球游戏实现

    游戏源码: pygame_os库:

    2024年02月12日
    浏览(43)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(35)
  • Java键盘事件处理及监听机制解析

    Java事件处理采用了委派事件模型。在这个模型中,当事件发生时,产生事件的对象将事件信息传递给事件的监听者进行处理。在Java中,事件源是产生事件的对象,比如窗口、按钮等;事件是承载事件源状态改变时的对象,比如键盘事件、鼠标事件、窗口事件等等。当事件发

    2024年02月13日
    浏览(26)
  • Python的Pygame游戏框架(汇总)

    个人主页 : ζ小菜鸡 大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习Python的Pygame游戏框架。 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)   pygame是跨平台Python模块,专为电子游戏设置,包含图像、声音。创建在SDL(Simple Direct Medica Layer)基础上,允许实时电

    2024年02月09日
    浏览(41)
  • python游戏库pygame经典教程

    目录 一.Pygame程序基本搭建过程         1.初始化化程序         2.创建Surface对象         3.事件监听         4.游戏循环  二.Pygame Display显示模块详解         1.将Surface对象粘贴至主窗口上         2.设置窗口主窗口         3.填充主窗口背景,参数

    2024年02月03日
    浏览(38)
  • Python之Pygame游戏编程详解

    1.1  定义 Pygame是一种流行的Python游戏开发库,它提供了许多功能,使开发人员可以轻松创建2D游戏。它具有良好的跨平台支持,可以在多个操作系统上运行,例如Windows,MacOS和Linux。在本文中,我们将介绍Pygame库的特点和用法,帮助您了解如何使用Pygame库进行游戏开发。它提

    2024年02月04日
    浏览(38)
  • Python利用pygame实现飞机大战游戏

    文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 Demo 必备知识:python图形化编程pygame游戏模块 效果图 ◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考:【Python游戏】1小时开发飞机大战游戏-Pygame版本(1小时40分钟) 博主提取资源: 提取

    2024年04月09日
    浏览(50)
  • Python游戏利器pygame,疯狂赛车(34)

    小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 你玩过游戏吗? 你喜欢玩游戏吗? 手机游戏,电脑游戏,还是游戏机游戏? pygame是一个跨平台Python库,pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public Lice

    2024年02月05日
    浏览(40)
  • Python基础篇(十五)-- Pygame游戏编程

            Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让

    2024年02月05日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包