我如何读取和存储鼠标坐标,而其余功能却没有做太多,几乎停滞不前?

How can i read and store mouse coordinates while the rest of the function does not do much, pretty much stall?

所以我下面有一个 matlab 函数 returns [x y time_elapsed] 坐标从 'start' 到 'target' 的矩阵,'target' 是当它与它的距离为 acc_length 时到达。 time_elapsed 是为了帮助我获取速度配置文件。

目前,这在大约每 0.01 秒采样一次时工作正常,并且从 'start' 开始运动时有 2 秒的暂停。

我的问题是我怎样才能做同样的事情 - 让用户在到达 'start' 位置后等待 2 秒,而不是暂停程序,我怎样才能继续阅读鼠标坐标(在 2s 周期内),而 2s 没有任何有用的变化?

P.S。我想得到这些坐标来计算用户一开始的精度。

function arr = pmove(start, target, acc_length)
uimenufcn(gcf,'WindowCommandWindow');

arr = [];
checkStart = 1;
checkEnd = 0;

while checkStart
    pt = get(0,'PointerLocation');
    pt = [pt(1) - 1920/2, pt(2) - 1080/2];
    d = pdist( [start; pt] );

    if ~checkEnd & d <= acc_length;
        disp('Start moving to target after 2 seconds.')
        pause(2);
        pt = get(0, 'PointerLocation');
        pt = [pt(1) - 1920/2, pt(2)-1080/2, 0];
        arr = cat(1, arr, pt);
        checkEnd = 1;

        tic;
        continue;
    end

    if checkEnd
        d = pdist( [target; pt] );
        t_elapsed = toc;
        pt = [pt , t_elapsed];
        arr = cat(1, arr, pt);

        if d <= acc_length
            checkStart = 0;
        end
    end

    if ~isempty(arr)
        figure(gcf)
        hold on;
        plot(arr(:,1), arr(:,2) );
        %drawnow;
        axis equal;
    end
    pause(0.01);

end

结束

您可以将 pause(2) 行替换为:

for i=1:200
    pt2 = get(0, 'PointerLocation');
    % do your calculation
    pause(0.01);
end

我正在使用另一个 while-true 循环并检查 time_elapsed,如果它长于 2.1 秒(用户的容差为 0.1 秒),我将跳出循环。在此期间,我每 0.01 秒得到一次指针坐标,运行 我的计算。

tic;
while 1
    pt2 = get(0,'PointerLocation');

    % calculation

    time_elaps = toc;
    if time_elaps > 2.1       % tolerance of 0.1s
        break;
    end
    pause(0.01);
end