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

如何在Pygame中对比鼠标按下与抬起两个状态的位置坐标

问题解决方法

问题根源

你当前的报错是因为x/y和x1/y1仅在对应鼠标事件触发时才会被赋值,程序启动后未触发对应事件、或仅触发其中一类事件时,变量就会处于未定义状态,无法直接调用。

修复方案

你可以按以下逻辑修改代码:

  1. 提前初始化坐标变量,用None作为默认值标识未被赋值的状态
  2. 选择在鼠标抬起事件触发时执行对比逻辑,此时必然已经完成按下的操作,只要额外校验按下坐标有有效值即可
  3. 对比完成后可重置坐标变量,避免上一次操作的数值干扰下一次判断

修复后示例代码

# 首先修正原代码第一行的笔误:un = True 应为 run = True
import pygame
pygame.init()

# 提前初始化坐标变量
mouse_down_pos = None
mouse_up_pos = None
run = True

# 此处省略你自己的窗口初始化、Player函数定义、PlayerX/PlayerY变量定义等逻辑
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_down_pos = pygame.mouse.get_pos()
        if event.type == pygame.MOUSEBUTTONUP:
            mouse_up_pos = pygame.mouse.get_pos()
            # 仅当按下坐标有有效值时执行对比
            if mouse_down_pos is not None:
                down_x, down_y = mouse_down_pos
                up_x, up_y = mouse_up_pos
                # 以下为你的对比逻辑示例,可自行修改
                print(f"按下坐标:({down_x}, {down_y}),抬起坐标:({up_x}, {up_y})")
                if up_x > down_x:
                    print("水平拖动方向:向右")
                else:
                    print("水平拖动方向:向左")
                if up_y > down_y:
                    print("垂直拖动方向:向下")
                else:
                    print("垂直拖动方向:向上")
                # 对比完成后重置变量,准备下一次操作
                mouse_down_pos = None
                mouse_up_pos = None

    Player(PlayerX, PlayerY)
    pygame.display.update()

补充说明

如果你需要在事件循环外的其他位置使用坐标对比结果,可以提前定义一个变量存储对比结果,比如drag_result = {},在事件内完成对比后给这个变量赋值,外部直接调用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:15:03