目录
一、获取&读取事件
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是指加载的音乐。文章来源:https://www.toymoban.com/news/detail-766142.html
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模板网!