Pygame第六课:事件

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

目录

一、获取&读取事件

1.1 获取事件

1.2 读取事件

二、判断&反应

三、各个事件精讲

3.1 键盘事件

3.1.1 按下键盘

3.1.2 释放键盘

3.1.3 各个常用按键事件对照表

3.2 鼠标事件

3.2.1 获取事件

3.2.2 精确哪一个按键(左键或右键)

3.2.3 获取鼠标位置

3.3 pygame.QUIT事件

3.3.1 什么是pygame.QUIT事件

3.3.2 检测到了,如何关闭

四、应用方法:操控图片移动

4.1 思路 

4.2 制作

4.2.1 初始化

 4.2.2 获取事件

4.2.3 动画

四、示例&补充

4.1 音乐停止

4.2 示例程序


人生苦短,我用Python!

一、获取&读取事件

1.1 获取事件

获取事件需要pygame.event.get()方法。

其返回的类型的是list列表。

1.2 读取事件

我们往往获取事件后,不将其保存在某个变量中,而是用for循环用event对象将其遍历,一项一项的判断,这是常用手段。

精讲:for循环的格式和while循环、if语句有些相似,格式为:

for 变量 in 列表等对象,可以用得到列表的函数 

    主体

    主体

结构:首先第一行要有for关键字,后面是一个变量,在后面是in关键字,最后面是列表对象(得到列表的函数),冒号换行。下面便是带缩进的主体,前面空四个格。往往我们用的IDE自带自动缩进功能,不过有的需要你检查,不然容易出现逻辑错误。

而至于如何判断,作出反应,就要用if语句,至于怎么用,我接下来就讲。

二、判断&反应

敲重点!敲重点!

接下来,我们将讲解如何判断做出反应。

我们会用if语句,而条件便是event.type==事件,而主体便是反应。

三、各个事件精讲

3.1 键盘事件

3.1.1 按下键盘

按下键盘会触发pygame.KEYDOWN事件。

不过,它只管按下的那一刻,在此之后只有松开再按才能再次触发pygame.KEYDOWN事件。

而我们经常精确到某个键,所以需要在它的主体中设定按下各个按键的反应,使用if……elif语句。其条件为event.key==按键事件。

精讲:elif语句与if语句格式几乎相同,只是关键字为elif。elif往往与if语句连用,构成if……elif语句。通常在多个条件同样性质,有了它就没有别的这样的,第一个用if语句,其他用elif语句。

各个按键都有对应的事件,它和另一个键盘事件是相通的。

3.1.2 释放键盘

但你按一下按键,在按键不再按着时,会触发pygame.KEYUP事件。

它和pygame.KEYDOWN事件一样的,我们通常精确到某个键,所以往往需要在它的主体中释放设置每个按键的反应,使用if……elif语句其条件为event.key==按键事件。

3.1.3 各个常用按键事件对照表

按键 名称
pygame.K_UP

pygame.K_DOWN

pygame.K_LEFT
pygame.K_RIGHT
空格

pygame.K_SPACE

esc

pygame.K_ESCAPE

3.2 鼠标事件

鼠标事件有三种:按下鼠标MOUSEBUTTONDOWN,释放鼠标MOUSEBUTTONUP,划过窗口MOUSEMOTION

我们主要讲解MOUSEBUTTONDOWN事件。

3.2.1 获取事件

获取这个事件,还是刚才的那样。接下来是重点。

3.2.2 精确哪一个按键(左键或右键)

要精确到是左击还是右击,需要用到pygame.mouse.get_pressed()函数,它返回的是一个列表。其中第一项(索引[0])是代表左键是否按下,第三项(索引[2])是代表右键是否按下,它们的值都是布尔运算值,直接在函数名称后加上索引即可判断是否按下对应按键

精讲:布尔运算值,有True(成立)和False(不成立)两种结果。除了上面event.type==事件这种可以得出布尔运算值,进行判断外,也可以像刚才这样直接用是布尔运算值的元素(列表的部分或变量)进行判断。

3.2.3 获取鼠标位置

获取鼠标位置,要用event.pos方法。

当需要获取时,一般情况下,会将其保存在变量中。

其得到的是一个表示坐标的元组。

3.3 pygame.QUIT事件

提到pygame.QUIT事件,我要慢慢说。

3.3.1 什么是pygame.QUIT事件

pygame.QUIT事件,是指用户点击“关闭”按钮的事件,但一般情况下,它并不会自动关闭,有时可能出现未响应的情况。除非我们关闭Python。所以需要这个事件。

3.3.2 检测到了,如何关闭

这个事件和前面的检测方法一致,十分简单。

那如何关闭pygame窗口呢?用pygame.quit()方法。用pygame.quit()方法,可以关闭pygame窗口,还关闭了pygame其他东西,与pygame.init()函数作用相对。

四、应用方法:操控图片移动

4.1 思路 

一个游戏角色,是需要能够操控的,一般角色,是按键按着就动,松开就停。

所以,我们将让两大键盘事件同时参与进来,来进行操控。

同时,我们需要用四个变量,设为布尔运算值。由这两个变量控制角色的移动。

最后,还有一点,就是比须能够关闭

4.2 制作

4.2.1 初始化

初始化比较简单,就直接罗列了。记住,那四个变量在初始化时必须是False。

import pygame
pygame.init()
screen=pygame.display.set_mode([500,400])

moveup=movedown=moveleft=moveright=False  #设置好这两个变量,初始为False。
picX=picY=0  #设置坐标
me=pygame.image.load("run2.png")  #加载图片
timer=pygame.time.Clock()  #设置时钟
BLACK=(0,0,0)  #设置颜色

 4.2.2 获取事件

在这一段基础上,加一个while True的循环下面就是事件了

事件方面,在pygame.KEYDOWN事件中,我们将对应的值改为True,在pygame.KEYUP事件中,我们再将对应的值改为False。

import pygame
pygame.init()
screen=pygame.display.set_mode([500,400])

moveup=movedown=moveleft=moveright=False  #设置好这两个变量,初始为False。
picX=picY=0  #设置坐标
me=pygame.image.load("run2.png")  #加载图片
timer=pygame.time.Clock()  #设置时钟
BLACK=(0,0,0)  #设置颜色

#循环
while True:
    #事件部分
    for event in pygame.event.get():
        if event.type==pygame.QUIT:  #关闭窗口
            pygame.quit()
        elif event.type==pygame.KEYDOWN:  #按下键盘
            if event.key==pygame.K_UP:  #上键,向上移动
                moveup=True
            elif event.key==pygame.K_DOWN:  #下键,向下移动
                movedown=True
            elif event.key==pygame.K_LEFT:  #左键,向左移动
                moveleft=True
            elif event.key==pygame.K_RIGHT:  #右键,向右移动
                moveright=True
        elif event.type==pygame.KEYUP:  #释放键盘
            if event.key==pygame.K_UP:  #上键,停止向上
                moveup=False
            elif event.key==pygame.K_DOWN:  #下键,停止向下
                movedown=False
            elif event.key==pygame.K_LEFT:  #左键,停止向左
                moveleft=False
            elif event==pygame.K_RIGHT:  #右键,停止向右
                moveright=False

4.2.3 动画

动画需要进行条件判断,判断的便是这四个变量。如果对应变量为True,那么就会向相对应方向移动。这便是精髓。

import pygame
pygame.init()
screen=pygame.display.set_mode([500,400])

moveup=movedown=moveleft=moveright=False  #设置好这两个变量,初始为False。
picX=picY=0  #设置坐标
me=pygame.image.load("run2.png")  #加载图片
timer=pygame.time.Clock()  #设置时钟
BLACK=(0,0,0)  #设置颜色

#循环
while True:
    #事件部分
    for event in pygame.event.get():
        if event.type==pygame.QUIT:  #关闭窗口
            pygame.quit()
        elif event.type==pygame.KEYDOWN:  #按下键盘
            if event.key==pygame.K_UP:  #上键,向上移动
                moveup=True
            elif event.key==pygame.K_DOWN:  #下键,向下移动
                movedown=True
            elif event.key==pygame.K_LEFT:  #左键,向左移动
                moveleft=True
            elif event.key==pygame.K_RIGHT:  #右键,向右移动
                moveright=True
        elif event.type==pygame.KEYUP:  #释放键盘
            if event.key==pygame.K_UP:  #上键,停止向上
                moveup=False
            elif event.key==pygame.K_DOWN:  #下键,停止向下
                movedown=False
            elif event.key==pygame.K_LEFT:  #左键,停止向左
                moveleft=False
            elif event==pygame.K_RIGHT:  #右键,停止向右
                moveright=False
    
    #动画部分
    if moveup:  #向上移动
        picY -=10
    elif movedown:  #向下移动
        picY +=10
    elif moveleft:  #向左移动
        picX -=10
    elif movedown:  #向右移动
        picX +=10
    
    screen.fill(BLACK)
    screen.blit(me,(picX,picY))
    pygame.display.update()
    timer.tick(60)

好了,我们的项目完成了。

四、示例&补充

4.1 音乐停止

当我们的音乐想要在程序运行中停止,需要用xx.stop()方法。xx是指加载的音乐。

4.2 示例程序

import pygame
pygame.init()
screen=pygame.display.set_mode([1500,1000])
pygame.display.set_caption("绝处逢生")
 
#设置颜色
DODGERBLUE=(30,144,255)
DODGERBLUE2=(0,114,225)
SPRINGGREEN2=(0,255,140)
BLACK=(10,10,10)
RED=(255,0,0)
WHITE=(255,255,255)
 
me=pygame.image.load("Run 2.png") 
timer=pygame.time.Clock() 
picX = picY = 0

while True: 
    screen.fill(DODGERBLUE)
    pygame.draw.line(screen, BLACK, (0, 700), (1500, 700), 20)
    pygame.draw.rect(screen, SPRINGGREEN2, (0, 700, 1500, 300), 0) 
    pygame.draw.rect(screen, RED, (700, 0, 100, 50))
    pygame.draw.rect(screen, DODGERBLUE2, (690, -10, 120, 70), 10)
    
     #事件部分
    for event in pygame.event.get():
        if event.type==pygame.QUIT:  #关闭窗口
            pygame.quit()
        elif event.type==pygame.KEYDOWN:  #按下键盘
            if event.key==pygame.K_UP:  #上键,向上移动
                moveup=True
            elif event.key==pygame.K_DOWN:  #下键,向下移动
                movedown=True
            elif event.key==pygame.K_LEFT:  #左键,向左移动
                moveleft=True
            elif event.key==pygame.K_RIGHT:  #右键,向右移动
                moveright=True
        elif event.type==pygame.KEYUP:  #释放键盘
            if event.key==pygame.K_UP:  #上键,停止向上
                moveup=False
            elif event.key==pygame.K_DOWN:  #下键,停止向下
                movedown=False
            elif event.key==pygame.K_LEFT:  #左键,停止向左
                moveleft=False
            elif event==pygame.K_RIGHT:  #右键,停止向右
                moveright=False
    
    #动画部分
    if moveup:  #向上移动
        picY -=10
    elif movedown:  #向下移动
        picY +=10
    elif moveleft:  #向左移动
        picX -=10
    elif movedown:  #向右移动
        picX +=10
    screen.blit(me,(picX,picY))
    pygame.display.update()
    timer.tick(60)

人生苦短,我用Python!文章来源地址https://www.toymoban.com/news/detail-766142.html

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

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

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

相关文章

  • pygame学习(三)——支持多种类型的事件

    大家好!我是码银🥰 欢迎关注🥰: CSDN:码银 公众号:码银学编程 为了保证程序的持续刷新、保持打开的状态,我们会创建一个无限循环,通常使用的是while语句, while True:只要while条件保持为真,while语句块中的代码就会重复地执行。 在游戏或图形应用程序中,事件处理

    2024年01月17日
    浏览(31)
  • 秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)

    目录 预备知识 键盘控制物体移动事件 鼠标点击控制物体移动事件 鼠标移动的同时画彩色小球 预备知识 pygame的基本函数介绍 1.初始化函数,pygame的必备  pygame.init()   2.设置屏幕的大小 pygame.display.set_mode(size) //(长,宽) 3. 程序的命名 pygame.display.set_caption(\\\"string\\\") 4.屏幕的颜

    2023年04月08日
    浏览(45)
  • 【小黑嵌入式系统第六课】嵌入式系统软件设计基础——C语言简述、程序涉及规范、多任务程序设计、状态机建模(FSM)、模块化设计、事件触发、时间触发

    上一课: 【小黑嵌入式系统第五课】嵌入式系统开发流程——开发工具、交叉开发环境、开发过程(生成调试测试)、发展趋势 下一课: 【小黑嵌入式系统第七课】PSoC® 5LP 开发套件(CY8CKIT-050B )——PSoC® 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 1、为什么要用C语言? 理

    2024年02月06日
    浏览(58)
  • 如何在pycharm中安装pygame游戏插件 和Python中安装pygame教程

    在用pycharm软件开发python小游戏前,需要安装pygame的插件,如何安装呢? 方法一、包管理器安装 1、在pycharm软件中定位到  file  – settings 2、定位到: project (自己的项目中)–python interpreter,选择右边的 pip 3、双击 pip ,进入查询插件界面,输入  pygame  ,进行查询这个插件

    2024年02月02日
    浏览(44)
  • Python Pygame使用详解

    Python Pygame使用详解 Pygame是一个强大的Python库,用于开发2D游戏和多媒体应用程序。它基于Simple DirectMedia Layer(SDL)库,提供了一组功能丰富的工具和函数,使开发者能够轻松创建游戏、图形和音频应用程序。本文将详细介绍如何使用Pygame库进行游戏开发,并提供相应的源代码

    2024年02月03日
    浏览(41)
  • 【Python-Pygame】

    Pygame 是一个专门用来开发游戏的 Python 模块,主要为开发、设计 2D 电子游戏而生,它是一个免费、开源的第三方软件包, 支持多种操作系统,具有良好的跨平台性(比如 Windows、Linux、Mac 等)。 Pygame 教程适合想要了解 Python 游戏开发的人员学习。 SDL 是一套开放源代码的跨平

    2024年04月23日
    浏览(28)
  • Python学习笔记-Pygame

    目录 一、Pygame概述 1.安装Pyganme 2.Pygame常用模块介绍 2.1 display模块常用方法 2.2 pygame.event模块常用方法 2.3 Surface对象的常用方法 二、问题汇总 1.窗体问题 1.1 添加死循环之后出现窗体未响应。 记述关于Pyganme开发的基本知识。 Pygame是跨平台的python模块,转为电子游戏设计(包含

    2024年02月09日
    浏览(100)
  • Python游戏篇:pygame

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

    2024年02月13日
    浏览(46)
  • python如何安装pygame模块

    游戏设计作品集,艺术留学申请条件/费用/流程全面详解查看详情广告 1 首先按键盘上的“Win + R”键。 游戏设计作品集,艺术留学申请_ACG国际艺术教育查看详情广告 2 在弹出的运行窗口中输入cmd,输入完成后点击确定。 3 然后在弹出的命令提示符窗口中输入python,输入完成后点

    2024年02月03日
    浏览(42)
  • python 五子棋 pygame

    自己用python写的五子棋 ,辛辛苦苦写的详细注释,等以后再回来看看自己的思路  用的函数式编程,面向对象不熟练,当时的想法是先通过函数式编程写出来,把思路整理一下, 理清楚过程事件了,再用面向对象重写,也算是再梳理一遍  用了第三方库pygame 有个问题,如果

    2023年04月23日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包