跳至正文
View Categories

1 min read

主要内容 #

  1. 模块介绍
  2. 模块参数说明
  3. 使用示例

收获 #

通过本节学习,您可以了解pygame中的事件模块,并且会使用模块处理事件。

1.模块介绍 #

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

下述表格列出了 Pygame 中常用的游戏事件:

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

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

2.模块参数说明 #

下面对鼠标事件和键盘事件分别做简单的介绍。
处理键盘事件:
键盘事件会涉及到大量的按键操作,比如游戏中的上下左右,或者人物的前进、后退等操作,这些都需要键盘来配合实现。
键盘事件提供了一个 key 属性,通过该属性可以获取键盘的按键。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

3.使用示例 #

下面通过“图片移动”示例来了解键盘事件的处理过程,如下所示:
在此代码中用到的logo.png,点击下载,同学们可以直接点击下载使用,当然同学们也可以自己上传图片运行代码。

import pygame
import sys

# 初始化pygame
pygame.init()
# 定义变量
size = width, height = 600, 400
bg = (255, 255, 255)

# 加载logo图
img = pygame.image.load("C:/Users/91566/Desktop/dashima/logo.png")
# 获取图像的位置
position = img.get_rect()
# 创建一个主窗口
screen = pygame.display.set_mode(size)
# 标题
pygame.display.set_caption("大师码")
# 创建游戏主循环
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()

程序运行结果如下:

拓展练习:将上述代码中移动按键改为通过“WSAD”来控制上下左右移动。

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

import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450,400))
pygame.display.set_caption("大师码")
# 更新显示
pygame.display.flip()

while True:
    #等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")

    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 获取鼠标当前位置
        print('鼠标按下',event.pos)
        mx,my = event.pos
        # 调用 pygame.draw 模块画圆
        pygame.draw.circle(screen,(255,255,0),(mx,my),50)
        # 处理完,更新显示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print('鼠标弹起')
        pass

    if event.type == pygame.MOUSEMOTION:
        print('鼠标移动')
        mx, my = event.pos
        # 随机生成 RGB 颜色值
        r = randint(0,255)
        g = randint(0,255)
        b = randint(0,255)
        pygame.draw.circle(screen, (r,g,b,),(mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()

程序运行结果如下:

拓展练习:将上述代码中生成的圆形换成矩形。

小结 #

本节主要介绍了Pygame Event事件模块,介绍了Pygame 中常用的游戏事件,处理事件队列的常用方法,对鼠标事件和键盘事件分别做简单的介绍并且给出实例。

练习 #

1.自己选择一个logo图,通过“图片移动”来了解键盘事件的处理过程,其中使用WSAD按键来控制图片的上下左右移动。
2.改写通过一组简单的示例对鼠标事件进行演示的实例代码,鼠标点击时生成一个以当前位置为中心的边长为50的正方形,其他不变。