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.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!

猜你喜欢

转载自blog.csdn.net/Python_program/article/details/133581934
今日推荐