详解Pygame 加载光标

  • Post category:Python

当使用 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()

上述代码基本流程是:

  1. 加载光标文件,得到光标和热点
  2. 创建 Pygame 窗口
  3. 不断循环,接受 Pygame 事件
  4. 调用 set_cursor() 方法,将光标和鼠标坐标粘连在一起
  5. 更新 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() 方法实现,其中不同的光标类型对应不同的方法。需要注意的是,加载动画光标的方法返回的是一个迭代器对象,需要不断获取光标帧数和热点坐标。