触摸监视事件触发的触摸模拟卡死

问题在窗口监控代码的倒数第八行

var window = floaty.window(
    <frame>
        <button id="action" text="i    获取x1" w="90" h="40" bg="#77ffffff"/>
    </frame>
);

setInterval(()=>{}, 1000);
 
//var execution = null;

//我的变量
var x1,x2,t = 0,k = 1.58;
//记录按键被按下时的触摸坐标
var x = 0, y = 0;
//记录按键被按下时的悬浮窗位置
var windowX, windowY;
//记录按键被按下的时间以便判断长按等动作
var downTime;
 
window.action.setOnTouchListener(function(view, event){
    switch(event.getAction()){
        case event.ACTION_DOWN:
            x = event.getRawX();
            y = event.getRawY();
            windowX = window.getX();
            windowY = window.getY();
            downTime = new Date().getTime();
            return true;
        case event.ACTION_MOVE:
            //移动手指时调整悬浮窗位置
            window.setPosition(windowX + (event.getRawX() - x),
                windowY + (event.getRawY() - y));
            //如果按下的时间超过6秒判断为长按,退出脚本
            if(new Date().getTime() - downTime > 6000){
                exit();
            }
            return true;
        case event.ACTION_UP:
            //手指弹起时如果偏移很小则判断为点击
            if(Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5){
                onClick();
                if(t > 0){
                    press(550,750,t);  //这一行卡死,经测试t的数值正常,注释这一行能正常运行。
                    t = 0;
                }
            }
            return true;
    }
    return true;
});
  
function onClick(){
    if(window.action.getText() == 'i    获取x1'){
        x1 = window.getX();  
        window.action.setText('i    获取x2');
    }else{
        x2 = window.getX();
        t = (x1 - x2) * k;
        if(t < 0)
            t = -t;
        window.action.setText('i    获取x1');
    }
}
最后由 Saber_f 编辑

悬浮窗的事件代码应该是在ui线程中运行的,容易出现崩溃卡死问题。你让他在新线程中运行就正常了。

var window = floaty.window(
<frame>
    <button id="action" text="i    获取x1" w="90" h="40" bg="#77ffffff"/>
</frame>
);

setInterval(()=>{}, 1000);

//var execution = null;

//我的变量
var x1,x2,t = 0,k = 1.58;
//记录按键被按下时的触摸坐标
var x = 0, y = 0;
//记录按键被按下时的悬浮窗位置
var windowX, windowY;
//记录按键被按下的时间以便判断长按等动作
var downTime;

window.action.setOnTouchListener(function(view, event){
    switch(event.getAction()){
        case event.ACTION_DOWN:
        x = event.getRawX();
        y = event.getRawY();
        windowX = window.getX();
        windowY = window.getY();
        downTime = new Date().getTime();
        return true;
    case event.ACTION_MOVE:
        //移动手指时调整悬浮窗位置
        window.setPosition(windowX + (event.getRawX() - x),
            windowY + (event.getRawY() - y));
        //如果按下的时间超过6秒判断为长按,退出脚本
        if(new Date().getTime() - downTime > 6000){
            exit();
        }
        return true;
    case event.ACTION_UP:
        //手指弹起时如果偏移很小则判断为点击
        if(Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5){
            onClick();
            if(t > 0){
                // press(550,750,t);  //这一行卡死,经测试t的数值正常,注释这一行能正常运行。
                threads.start(function(){
                    press(550,750,t);
                    t = 0;
                });
            }
        }
        return true;
}
return true;
});
  
function onClick(){
if(window.action.getText() == 'i    获取x1'){
    x1 = window.getX();  
    window.action.setText('i    获取x2');
}else{
    x2 = window.getX();
    t = (x1 - x2) * k;
    if(t < 0)
        t = -t;
    window.action.setText('i    获取x1');
}
}

问题解决了,非常感谢

  • 3
    帖子
  • 466
    浏览

与 Auto.js 的连接断开,我们正在尝试重连,请耐心等待