You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame自定义光标绘制异常:鼠标移出窗口右下区域时未停止渲染

解决Pygame自定义光标移出窗口右侧/底部时残留的问题

问题根源

你用坐标范围判断鼠标是否在窗口内的逻辑有缺陷:当鼠标从窗口右侧或底部移出时,Pygame的pg.mouse.get_pos()会返回窗口边缘的最大有效坐标(比如x=MAX_X-1、y=MAX_Y-1),这时候你的条件x < MAX_X和y < MAX_Y仍然成立,导致光标继续被绘制,停留在窗口边缘。而从左侧或上部移出时,坐标会变成负数,条件不满足,光标才会消失。

最优解决方案

改用Pygame内置的pg.mouse.get_focused()函数,它能直接检测鼠标是否处于窗口内(窗口激活且鼠标在区域内),返回布尔值,完全避免坐标判断的误差。

修改后的代码

循环前初始化代码

import pygame as pg

pg.init()
screen = pg.display.set_mode((1316, 740))
MAX_X, MAX_Y = screen.get_size()
# 加载自定义光标(替换为你的文件路径)
cursor = pg.image.load("custom_cursor.png").convert_alpha()
cursorRect = cursor.get_rect()

游戏循环内代码

running = True
while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    # 必须填充背景,清除上一帧的光标残影
    screen.fill((255, 255, 255))

    x, y = pg.mouse.get_pos()
    # 仅当鼠标在窗口内时绘制自定义光标
    if pg.mouse.get_focused():
        # 更新光标位置为当前鼠标坐标
        cursorRect.topleft = (x, y)
        screen.blit(cursor, cursorRect)

    pg.display.flip()

pg.quit()

额外注意事项

  • 每次循环必须用背景色填充窗口,否则上一帧的光标会在屏幕上留下残影,造成“光标停留”的错觉。
  • 如果你的光标需要以中心对齐鼠标,可以把cursorRect.topleft = (x, y)改成cursorRect.center = (x, y)。

内容的提问来源于stack exchange,提问作者Ahmed Mahmoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:54:46