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()
相关推荐
狂奔solar7 小时前
DQN强化训练agent玩是男人就下xx层小游戏
python·pygame·dqn 强化
星和月7 小时前
Python——飞机大战
python·pygame
狐凄8 小时前
Python练习19
开发语言·python·pygame
虞书欣的610 小时前
Python小游戏25——黄金矿工
开发语言·人工智能·游戏·小程序·pygame
其木王·王子1 天前
0. 渲染游戏画面
python·游戏·pygame
2301_811212331 天前
python数据结构操作与可视化的应用
数据结构·python·信息可视化·django·virtualenv·pygame·tornado
狐凄3 天前
Python练习12
开发语言·python·pygame
KEEPMA3 天前
python练习-袭击敌机
开发语言·python·pygame
白狐欧莱雅5 天前
使用python中的pygame简单实现飞机大战游戏
经验分享·python·游戏·pygame
豆本-豆豆奶5 天前
用 Python 写了一个天天酷跑(附源码)
开发语言·python·游戏·pygame·零基础教程