如何获取和设置鼠标的信息和状态(位置,移动距离,按键状态,指针可见性等)
关注 1260
本节内容不涉及鼠标事件的讲解,要了解如何处理鼠标事件,请查看如何处理游戏中的鼠标,键盘事件一节。
Pygame 中的 mouse 模块
Pygame 的mouse
模块,提供了一些与鼠标相关的函数,可以帮助开发者获取或设置鼠标的信息和状态,比如,鼠标的位置,鼠标按键的按下状态。当然,在处理与鼠标相关的事件时,鼠标的信息也可能会由Event
事件对象提供。
请确保 Pygame 能够自行处理事件
如果希望mouse
模块中的函数能够正常工作,那么应在游戏循环中调用event
模块的pump
函数,该函数能够让 Pygame 自行处理事件。当然,event
模块的某些函数会隐式的调用pump
,比如get
函数(当其参数pump
为True
时)。
事件
关于如何让 Pygame 自行处理事件,请查看让 Pygame 自行处理事件队列中的事件一段。
获取和设置鼠标在游戏窗口中的位置
如何在 Pygame 中获取和设置鼠标位置视频演示 YouTube如何在 Pygame 中获取和设置鼠标位置视频演示 Bilibili
mouse
模块的函数get_pos
和set_pos
,可用于获取和设置鼠标相对于游戏窗口显示区域左上角的相对位置(坐标)。如果鼠标位于左上角的右方,那么位置的水平坐标为正数,如果鼠标位于左上角的下方,那么位置的垂直坐标为正数。当设置鼠标位置时,将引发鼠标移动事件(对应pygame
模块的MOUSEMOTION
变量)。
get_pos()
- 返回值
get_pos
函数返回一个形式类似于(x,y)
的整数元组,表示鼠标距离窗口显示区域左上角的相对位置,其中x
为水平方向的坐标,y
表示垂直方向的坐标。当鼠标位于窗口显示区域之外时,
get_pos
函数可能返回(0,0)
。
set_pos(x, y)
set_pos(pos)
- x 参数
x
参数是一个浮点数,表示鼠标相对于窗口显示区域左上角的水平方向坐标。- y 参数
y
参数是一个浮点数,表示鼠标相对于窗口显示区域左上角的垂直方向坐标。- pos 参数
pos
参数是一个序列对象,需要依次包含表示鼠标相对于窗口显示区域左上角的水平坐标和垂直坐标的浮点数。
set_pos 函数不会将鼠标的位置固定
函数set_pos
可以将鼠标移动至某个位置,但其效果是一次性的,如果你希望鼠标被固定在某个位置,那么可在游戏循环中不断的调用该函数。
# 导入相关模块,创建游戏窗口
from pygame import display, event, mouse
display.set_mode((800, 600))
while True:
# 显式的调用 pump 函数
event.pump()
# 获取鼠标位置
(x, y) = mouse.get_pos()
# 当鼠标位于窗口左上角时,他将被移至中心
if x < 100 and y < 100:
mouse.set_pos([400, 300])
# 当鼠标位于窗口右下角时,结束游戏循环
if x > 700 and x < 800 and y > 500 and y < 600:
break
获取鼠标在游戏窗口中的移动距离
如何在 Pygame 中获取鼠标移动距离和方向视频演示 YouTube如何在 Pygame 中获取鼠标移动距离和方向视频演示 Bilibili
mouse
模块的get_rel
函数,可用于获取鼠标在游戏窗口显示区域中的移动距离,该距离相对于上一次调用此函数时的鼠标位置。通过函数get_rel
,可间接的判断鼠标的移动方向。
get_rel()
- 返回值
get_rel
函数返回一个形式类似于(x,y)
的整数元组,表示鼠标在窗口显示区域中的移动距离,其中x
为水平距离(为正数表示鼠标相对于上一次向右进行了移动,为负数表示向左进行了移动),y
表示垂直距离(为正数表示鼠标相对于上一次向下进行了移动,为负数表示向上进行了移动)。
在下面的示例中,按下鼠标按键,将调用get_rel
并显示鼠标的水平移动距离和垂直移动距离。
# 导入相关模块,创建游戏窗口
from pygame import display, event, mouse, MOUSEBUTTONDOWN
display.set_mode((800, 600))
running = True
while running:
# 隐式的调用 pump 函数
for e in event.get():
if e.type == MOUSEBUTTONDOWN:
# 获取鼠标的移动距离
(x, y) = mouse.get_rel()
print('水平移动距离', x, '垂直移动距离', y)
# 如果实际的移动距离大于 400,则游戏循环结束
d = (x**2 + y**2) ** 0.5
print('实际移动距离', d)
if d > 400:
running = False
获取鼠标按键的按下状态
如何在 Pygame 中判断鼠标按键是否被按下视频演示 YouTube如何在 Pygame 中判断鼠标按键是否被按下视频演示 Bilibili
mouse
模块的get_pressed
函数,可用于一次性获取鼠标上多个按键的按下状态。
get_pressed(num_buttons=3)
- num_buttons 参数
num_buttons
参数只能是3
或5
。如果设置为3
,则获取鼠标左按键,滚轮按键和右按键的按下状态,如果设置为5
,则还将获取第四个按键和第五个按键的按下状态。- 返回值
根据所传递的
num_buttons
参数,get_pressed
函数将返回形式类似于(l,m,r)
或(l,m,r,b4,b5)
的元组。其中,l
对应鼠标左按键,m
对应鼠标滚轮按键,r
对应鼠标右按键,b4
对应鼠标上的第四个按键,b5
对应鼠标上的第五个按键。
在下面的示例中,如果同时按下鼠标的左键,右键和滚轮键,那么游戏将结束。
# 导入相关模块,创建游戏窗口
from pygame import display, event, mouse
display.set_mode((800, 600))
while True:
# 显式的调用 pump 函数
event.pump()
# 获取鼠标按键的按下状态
(l, m, r) = mouse.get_pressed()
# 如果鼠标左健,右键和滚轮键一同按下,那么游戏循环结束
if l and r and m:
break
获取和设置鼠标指针是否可见
如何在 Pygame 中获取和设置鼠标指针的可见性视频演示 YouTube如何在 Pygame 中获取和设置鼠标指针的可见性视频演示 Bilibili
mouse
模块的函数get_visible
和set_visible
,可用于获取和设置鼠标指针在游戏窗口中是否可见。
get_visible()
- 返回值
如果
get_visible
函数返回True
,则表示鼠标指针可见,否则表示不可见。
set_visible(value)
- value 参数
如果
value
参数等价于True
,那么鼠标指针可见,否则不可见。
在下面的示例中,如果点击鼠标左键,则将切换鼠标的可见状态,如果点击鼠标右键,则将结束游戏。
# 导入相关模块和变量,创建游戏窗口
from pygame import display, event, mouse, QUIT, MOUSEBUTTONUP, BUTTON_LEFT, BUTTON_RIGHT
display.set_mode((800, 600))
running = True
while running:
# 隐式的调用 pump 函数
for e in event.get():
if e.type == QUIT:
running = False
elif e.type == MOUSEBUTTONUP:
if e.button == BUTTON_LEFT:
# 获取鼠标的可见状态,并反转
v = mouse.get_visible()
mouse.set_visible(not v)
elif e.button == BUTTON_RIGHT:
# 退出游戏循环
running = False
判断鼠标是否位于游戏窗口中
mouse
模块的get_focused
函数,可用于判断鼠标是否位于游戏窗口的显示区域之中,基本等同于判断游戏窗口是否能够接收到鼠标的输入。
get_focused()
- 返回值
如果
get_focused
函数返回True
,则表示鼠标位于窗口显示区域之中,否则位于显示区域之外。
在下面的示例中,我们通过函数get_focused
判断鼠标是否位于显示区域,如果鼠标离开或进入显示区域的次数达到5
,则游戏循环将结束。
# 导入相关模块,创建游戏窗口
from pygame import display, event, mouse
display.set_mode((800, 600))
count = 0
focused = True
while True:
# 显式的调用 pump 函数
event.pump()
# 判断鼠标是否离开了显示区域
if focused and not mouse.get_focused():
focused = False
count += 1
print('鼠标离开了显示区域')
# 判断鼠标是否进入了显示区域
if not focused and mouse.get_focused():
focused = True
count += 1
print('鼠标进入了显示区域')
# 切换次数达到 5 次时,结束游戏
if count == 5:
break
内容分类
源码
讲解视频
如何在 Pygame 中获取和设置鼠标位置·YouTube如何在 Pygame 中获取和设置鼠标位置·Bilibili
如何在 Pygame 中获取鼠标移动距离和方向·YouTube如何在 Pygame 中获取鼠标移动距离和方向·Bilibili
如何在 Pygame 中判断鼠标按键是否被按下·YouTube如何在 Pygame 中判断鼠标按键是否被按下·Bilibili
如何在 Pygame 中获取和设置鼠标指针的可见性·YouTube如何在 Pygame 中获取和设置鼠标指针的可见性·Bilibili