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

Python结合CV2模板匹配,优化PyDirectInput移动随时停止逻辑咨询

优化思路

核心是只在需要移动时按住方向键,满足停止条件后立即松开,彻底避免反复调用keyDown和keyUp的问题。

实现步骤

  • 通过模板匹配获取目标坐标与当前角色坐标
  • 计算坐标差值判断移动方向,一次性按下对应方向键
  • 循环实时截图并计算坐标间距,达到停止阈值后松开按键
  • 加入短间隔控制截图频率,降低资源占用

优化后代码示例

import cv2
import pydirectinput
import time
import pyautogui
import numpy as np

def get_center_pos(screen_img, template_img):
    # 模板匹配并返回匹配区域的中心坐标
    result = cv2.matchTemplate(screen_img, template_img, cv2.TM_CCOEFF_NORMED)
    _, _, _, max_loc = cv2.minMaxLoc(result)
    h, w = template_img.shape[:2]
    return (max_loc[0] + w//2, max_loc[1] + h//2)

def move_to_target(target_pos, role_template, stop_threshold=5):
    # 计算初始坐标差值,确定移动方向
    screen_img = cv2.cvtColor(np.array(pyautogui.screenshot()), cv2.COLOR_RGB2BGR)
    current_pos = get_center_pos(screen_img, role_template)
    dx = target_pos[0] - current_pos[0]
    dy = target_pos[1] - current_pos[1]

    direction = 'right' if dx > abs(dy) else 'left' if dx < -abs(dy) else \
                'down' if dy > abs(dx) else 'up'

    # 按住方向键
    pydirectinput.keyDown(direction)

    # 循环检测直到到达目标区域
    while True:
        # 实时截图并更新当前坐标
        screen_img = cv2.cvtColor(np.array(pyautogui.screenshot()), cv2.COLOR_RGB2BGR)
        current_pos = get_center_pos(screen_img, role_template)
        # 计算当前与目标的曼哈顿距离
        distance = abs(target_pos[0] - current_pos[0]) + abs(target_pos[1] - current_pos[1])

        if distance <= stop_threshold:
            pydirectinput.keyUp(direction)
            break

        # 控制循环频率,避免资源占用过高
        time.sleep(0.05)

# 示例调用
# 提前加载角色和目标的模板图片
role_img = cv2.imread('role_template.png')
target_img = cv2.imread('target_template.png')

# 获取初始目标坐标
init_screen = cv2.cvtColor(np.array(pyautogui.screenshot()), cv2.COLOR_RGB2BGR)
target_position = get_center_pos(init_screen, target_img)

# 启动移动
move_to_target(target_position, role_img)

关键优化点

  • 减少按键交互次数:全程仅调用1次keyDown和1次keyUp,替代原逻辑中的反复调用
  • 简化循环逻辑:循环内仅做截图、坐标计算和阈值判断,执行效率更高
  • 降低资源消耗:通过time.sleep(0.05)控制截图频率,避免CPU过度占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:20:01