Pygame中监控鼠标动作的方法

Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客中提到,通过在while True循环中获取队列中事件的方法监控键盘动作。监控鼠标动作的方法与监控键盘动作的方法相同。

相关连接1 队列与事件的相关知识,请参考

Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客

1 鼠标事件的分类

队列中的鼠标事件主要分为3类:移动、按下和松开。这三个事件对应的值分别是MOUSEMOTION、MOUSEBUTTONDOWN和MOUSEBUTTONUP。

2 对于鼠标移动事件的处理

通过对鼠标移动事件的处理,实现实时显示鼠标坐标的功能,如图1所示。

图1 实时显示鼠标坐标

在while True循环中,首先通过pygame.event.get()从队列中获取事件,之后通过if语句对事件类型进行判断,代码如下所示。

python 复制代码
if event.type == MOUSEMOTION:

此时,表示鼠标正在屏幕中移动,此时,首先对屏幕进行填充,把之前显示的坐标覆盖掉

python 复制代码
screen.fill((0, 0, 255))

之后,构造要显示的坐标。

python 复制代码
coordinate = '(%d,%d)'%event.pos

其中,event.pos是一个元组,包含了鼠标当前的横坐标和纵坐标;最后,将构造好的鼠标坐标在屏幕上显示出来。

python 复制代码
imgText = font.render(coordinate, True, (255,255,255))
screen.blit(imgText,event.pos)
pygame.display.update()

相关链接2 font的使用方法,请参考

Pygame中监控键盘按键的方法_pygame获取键盘输入-CSDN博客

3 鼠标按下和松开事件

通过监控鼠标按下和松开事件,可以实现在屏幕上划线的功能。即以鼠标按下为起点,松开为终点画一条直线,如图2所示。

图2 屏幕画线

当按下鼠标时,其对应的事件是MOUSEBUTTONDOWN,此时将鼠标坐标保存为直线的起点。

python 复制代码
line_start = event.pos

当松开鼠标时,其对应的事件是MOUSEBUTTONUP,此时将鼠标坐标保存为直线的终点,根据起点和终点,通过pygame.draw.line()方法,在屏幕中画线。

python 复制代码
line_end = event.pos
pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
pygame.display.update()

其中,pygame.draw.line()方法的第一个参数表示指定的屏幕,第二个参数表示线的颜色;第三个和第四个参数分别表示线的起点和终点。

4 完整代码

以上提到的完整代码如下所示。

python 复制代码
import sys
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500, 200))
screen.fill((0, 0, 255))
pygame.display.update()
font = pygame.font.Font(None, 20)
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        if event.type == MOUSEMOTION:
            screen.fill((0, 0, 255))
            coordinate = '(%d,%d)'%event.pos
            imgText = font.render(coordinate, True, (255,255,255))
            screen.blit(imgText,event.pos)
            pygame.display.update()
        if event.type == MOUSEBUTTONDOWN:
            line_start = event.pos
        if event.type == MOUSEBUTTONUP:
            line_end = event.pos
            pygame.draw.line(screen, (255, 0, 0), line_start, line_end)
            pygame.display.update()
相关推荐
闲人编程8 小时前
Python游戏开发入门:Pygame实战
开发语言·python·游戏·pygame·毕设·codecapsule
百锦再16 小时前
金仓数据库提出“三低一平”的迁移理念
开发语言·数据库·后端·python·rust·eclipse·pygame
软件开发技术深度爱好者7 天前
python使用Pygame库实现避障小人行走游戏
python·游戏·pygame
隔壁程序员老王13 天前
基于 Python 的坦克大战小程序,使用 Pygame 库开发
python·小程序·pygame·1024程序员节
风亦辰73915 天前
从 Hello World 到游戏世界——pygame 快速入门
python·游戏·pygame
你才是向阳花18 天前
如何用python来做小游戏
开发语言·python·pygame
@sinner21 天前
《扫雷:病毒蔓延》- 颠覆传统的动态扫雷游戏
python·游戏·pygame
中文Python1 个月前
小白中文Python-db_桌面小黄鸭宠物
数据库·python·pygame·宠物·中文python·小白学python
高洁011 个月前
【无标题】大模型-扩散模型(Diffusion Model)原理讲解(3)
人工智能·python·神经网络·pygame
IT教程资源1 个月前
(免费分享)基于python的飞机大战游戏
python·游戏·pygame