当使用 Pygame 开发游戏或者其他交互式应用程序时,有时需要在窗口界面中使用自定义光标。Pygame 提供了加载光标文件的方法,能够轻松实现这一需求。
1. 准备光标文件
首先,需要准备一个 ” .cur ” 或者 ” .ani ” 的光标文件。可以在网上搜索或自己制作。
2. 加载光标
在 Pygame 中加载光标,使用 pygame.cursors.load_xbm()
或者 pygame.cursors.compile()
方法。这里,我们以 load_xbm()
方法为例。
import pygame
pygame.init()
# 注意:这里使用 .cur 文件进行演示
cursor_file = "my_cursor.cur"
# 加载光标文件
cursor, hotspot = pygame.cursors.load_xbm(cursor_file)
# 创建 Pygame 窗口
window = pygame.display.set_mode((640, 480))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# 将光标和当前鼠标坐标传入 set_cursor() 方法,将光标与鼠标粘连
pygame.mouse.set_cursor((24, 24), hotspot, *cursor)
pygame.display.update()
上述代码基本流程是:
- 加载光标文件,得到光标和热点
- 创建 Pygame 窗口
- 不断循环,接受 Pygame 事件
- 调用
set_cursor()
方法,将光标和鼠标坐标粘连在一起 - 更新 Pygame 显示层,让更新的光标生效
3. 加载动画光标
对于动画光标,可以使用 pygame.cursors.load_animated_cursor()
方法进行加载。下面我们来看一个在 Pygame 窗口中加载动画光标的示例:
import pygame
pygame.init()
# 加载光标文件
cursor_files = [
"cursor_1.ani",
"cursor_2.ani",
"cursor_3.ani"
]
cursors = pygame.cursors.load_animated_cursor(cursor_files)
# 创建 Pygame 窗口
window = pygame.display.set_mode((640, 480))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# 获取当前帧的光标图像和热点坐标
cursor, hotspot = next(cursors)
# 将光标和当前鼠标坐标传入 set_cursor() 方法,将光标与鼠标粘连
pygame.mouse.set_cursor((24, 24), hotspot, *cursor)
pygame.display.update()
上述代码演示了如何从多个文件中加载多帧动画光标,将光标连续播放在 Pygame 窗口中,形成动画效果。
需要注意的是, load_animated_cursor()
方法返回的是一个迭代器对象,需要通过 next()
方法不断获取下一帧光标图像和热点坐标。在播放完最后一帧光标图像后,迭代器会自动重置,从头开始播放。
综上所述,Pygame 加载光标可以通过 pygame.cursors.load_xbm()
和 pygame.cursors.load_animated_cursor()
方法实现,其中不同的光标类型对应不同的方法。需要注意的是,加载动画光标的方法返回的是一个迭代器对象,需要不断获取光标帧数和热点坐标。