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

鼠标围绕中心点旋转时角度检测代码仅触发2次而非预期4次的问题求助

鼠标围绕中心点旋转时角度检测代码仅触发2次而非预期4次的问题求助

嘿,我来帮你排查下这个问题!你现在遇到的情况是代码只触发了2次而非预期的4次,核心问题出在角度判断的逻辑上,咱们一步步拆解:

  • 判断条件逻辑完全错误
    你写的(degrees_angle - 90)%cycles==0这个条件根本达不到每90度检测一次的目的。虽然你设置了cycles=4想对应4次触发,但这个条件实际是在检查「(degrees_angle-90)是否是4的倍数」,这和你要找的90度间隔完全不沾边。
    你要检测的是视觉上的0、90、180、270度,对应代码里计算的degrees_angle是90、180、270、360,这些数的共同特征是都是90的整数倍,所以正确的判断条件应该是degrees_angle % 90 == 0。

  • 还要注意避免重复触发
    因为你每次给angle加0.1弧度(约5.73度),转换为整数的degrees_angle时,会在某个目标角度上停留好几次循环(比如从89.9度到90.1度之间,会有几次循环的degrees_angle都是90),如果不做处理会重复触发。你可以加一个集合来记录已经触发过的角度,避免重复操作:
    先定义一个集合triggered_angles = set(),然后在判断时加上degrees_angle not in triggered_angles的条件,触发后把当前角度加入集合。

  • 角度对应关系再确认
    你的代码是从顶部(视觉0度)开始逆时针旋转,对应代码里的初始angle=math.pi/2(90度),之后每转90度视觉角度,代码里的degrees_angle就增加90,所以用degrees_angle % 90 == 0正好能命中四个目标位置。

给你修改后的关键代码段参考:

import math
import win32api
import pyautogui
import time

cycles=4
triggered_angles = set()  # 新增:记录已触发的角度,避免重复
position_list = []
radius = 110
xcentre = 500  # 替换成你的实际中心点x坐标
ycentre = 500  # 替换成你的实际中心点y坐标
angle = math.pi /2 

while True:
    x= radius * math.cos(angle)
    y = radius * math.sin(-angle)
    win32api.SetCursorPos((int(x+xcentre), int(y+ycentre)))
    
    if angle >= 2*math.pi + math.pi/2:
        break
        
    degrees_angle = int(math.degrees(angle))
    mx, my = pyautogui.position()
    print(degrees_angle)
    
    # 修改后的判断条件
    if degrees_angle % 90 == 0 and degrees_angle not in triggered_angles:
        print("found")
        pyautogui.mouseDown(button='left')
        position_list.append(mx)
        position_list.append(my)
        triggered_angles.add(degrees_angle)  # 标记该角度已触发
        time.sleep(1)
        
    angle += 0.1

这样修改后,应该就能在四个目标位置都触发found操作了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 10:19:34