Skip to content

沿路径相对移动

使鼠标指针沿着指定的路径相对当前位置移动。

语法

cpp
class RX784::Device {
    Status movePathRel(
        int16_t               x,
        int16_t               y,
        uint32_t              duration,
        uint32_t              pollingRate    = 250,
        bool                  isIgnoreErrors = false,
        const Path&           path,
        std::function<void()> callback       = []{}
    );
};
class RX784::Device {
    Status movePathRel(
        int16_t               x,
        int16_t               y,
        uint32_t              duration,
        uint32_t              pollingRate    = 250,
        bool                  isIgnoreErrors = false,
        const Path&           path,
        std::function<void()> callback       = []{}
    );
};
e
类名基类公开备注
RX784设备
方法名返回值类型公开备注
沿路径相对移动整数型
参数名类型参考可空数组备注
x短整数型
y短整数型
持续时间整数型
路径路径
轮询率整数型
是否忽略错误逻辑型
回调子程序指针
.版本 2 .程序集 RX784设备, , 公开 .子程序 沿路径相对移动, 整数型, 公开 .参数 x, 短整数型 .参数 y, 短整数型 .参数 持续时间, 整数型 .参数 路径, 路径 .参数 轮询率, 整数型, 可空 .参数 是否忽略错误, 逻辑型, 可空 .参数 回调, 子程序指针, 可空
py

参数

名称英文说明
xx水平方向偏移值,左负右正。
yy竖直方向偏移值,上负下正。
持续时间duration移动到指定坐标的持续时间,单位为毫秒(ms)。
轮询率polling rate每秒更新位置的次数,单位为赫兹(Hz)。
是否忽略错误is ignore errors忽略后如果某一步出错了,不会马上结束函数而是继续执行。
路径path目前支持
回调callback每移动一小步会调用一次回调。

返回值

名称英文说明
状态码status成功返回

类型

线性路径

通过方程 a1sin(b1st)+a2sin(b2st) 实现抖动的线性路径,st 表示某时刻光标到目标的直线移动量。速度变化通过三次贝塞尔曲线定义,可通过 https://cubic-bezier.com/ 生成参数。

cpp
namespace RX784 {
    struct LinearPath {
        double a1;
        double b1;
        double a2;
        double b2;
        double p1x;
        double p1y;
        double p2x;
        double p2y;
    };
}
namespace RX784 {
    struct LinearPath {
        double a1;
        double b1;
        double a2;
        double b2;
        double p1x;
        double p1y;
        double p2x;
        double p2y;
    };
}
e
方法名返回值类型公开备注
线性路径路径
参数名类型参考可空数组备注
a1双精度小数型
b1双精度小数型
a2双精度小数型
b2双精度小数型
p1x双精度小数型
p1y双精度小数型
p2x双精度小数型
p2y双精度小数型
.版本 2 .子程序 线性路径, 路径, 公开 .参数 a1, 双精度小数型 .参数 b1, 双精度小数型 .参数 a2, 双精度小数型 .参数 b2, 双精度小数型 .参数 p1x, 双精度小数型 .参数 p1y, 双精度小数型 .参数 p2x, 双精度小数型 .参数 p2y, 双精度小数型
py

备注

这个方法是通过多次使用相对移动实现的,若移动过程中碰到屏幕边界,或移动了实体鼠标,会导致偏离目标,如果需要移动到精确坐标,可以在移动后调用一次 绝对移动,或直接使用 沿路径绝对移动

示例

cpp
#include "rx784.hpp"
#include "rx784ext.h"

int main() {
    RX784::Device device;

    device.open("COM1");

    // x 轴偏移 500, y 轴偏移 100,耗时 1 秒
    device.movePathRel(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,即 1 秒移动 125 步
    device.movePathRel(500, 100, 1000, 125u,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 忽略执行过程中的错误
    device.movePathRel(500, 100, 1000, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,忽略错误
    device.movePathRel(500, 100, 1000, 125, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 设置回调,每移动一小步打印一次 hello
    // 回调可以用 lambda 表达式,也可以用函数指针
    device.movePathRel(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 },
                       []{
                           std::cout << "hello" << std::endl;
                       });

    device.close();
}
#include "rx784.hpp"
#include "rx784ext.h"

int main() {
    RX784::Device device;

    device.open("COM1");

    // x 轴偏移 500, y 轴偏移 100,耗时 1 秒
    device.movePathRel(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,即 1 秒移动 125 步
    device.movePathRel(500, 100, 1000, 125u,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 忽略执行过程中的错误
    device.movePathRel(500, 100, 1000, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 轮询率设为 125Hz,忽略错误
    device.movePathRel(500, 100, 1000, 125, false,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 });

    // 设置回调,每移动一小步打印一次 hello
    // 回调可以用 lambda 表达式,也可以用函数指针
    device.movePathRel(500, 100, 1000,
                       RX784::LinearPath{ 0.5, 0.5, 0.9, 0.1,
                                          0.5, 0.2, 0.8, 0.7 },
                       []{
                           std::cout << "hello" << std::endl;
                       });

    device.close();
}
e
方法名返回值类型公开备注
_启动子程序整数型
变量名类型静态数组备注
设备RX784设备
设备.打开 (“COM1”)
设备.沿路径相对移动 (100, 100, 1000, 线性路径 (0.5, 0.5, 0.9, 0.1, 0.5, 0.2, 0.8, 0.7))
设备.关闭 ()
返回 (0)
.版本 2 .子程序 _启动子程序, 整数型 .局部变量 设备, RX784设备 设备.打开 (“COM1”) 设备.沿路径相对移动 (100, 100, 1000, 线性路径 (0.5, 0.5, 0.9, 0.1, 0.5, 0.2, 0.8, 0.7)) 设备.关闭 () 返回 (0)
py
import rx784
import rx784