开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

123
返回列表 发新帖
楼主: Scorpio
收起左侧

[易语言] 梦幻西游 鼠标漂移问题,求解决!

[复制链接]
结帖率:50% (2/4)
发表于 2012-7-23 20:43:45 | 显示全部楼层   北京市北京市
帮你顶下!!1
回复

使用道具 举报

结帖率:100% (1/1)
发表于 2012-7-24 14:04:10 | 显示全部楼层   河南省郑州市
//解决漂移问题3种方法:
//第一种,采用渐近的方法,就是不停的把虚拟坐标向目标移动
//第二种,鼠标在小范围内移动漂移会很小,可以采用每次小步的向目标移动并且修正方向
//第三种,有人说虚拟鼠标和系统鼠标连线上有个焦点,距离焦点的远近就会成比例的漂移
//我试过第一和第三种方法,因为我觉得第二种会很慢,如果第三种的规律找到了,将会是一步解决漂移,
//可是我研究了很久,仍然不行,我就采用第一种方法了
//大家在论坛上用的词语“虚拟鼠标”我理解为梦幻西游的鼠标,下面写到的时候不要误解哦
//当目标坐标在边界很近大约<5个坐标距离时漂移很难解决,还会失败在边界不停的跳

Sub 飘移
    MoveTo x,y
    Rem 仍然飘移
    VBS Dim m,n,a,b
    VBSCall FindPic(xMin,yMin,xMax,yMax,"a29g.bmp",0.9,m,n)
    //在边界内查找虚拟鼠标的位置,求边界的方式不同,我用的也是找图,然后通过加加减减得到边界的坐标
    //我用找图来找虚拟鼠标的,梦幻的鼠标是动态的,我把动的部分挖掉了,这个作图很重要做不好会影响下面
   
    If m>=0 and n>=0
        If (m-x) *(m-x)+(n-y)*(n-y)<4
            //x,y是目标坐标,如果虚拟鼠标和目标坐标误差在允许的范围内就跳出循环,既漂移解决了
            Goto 漂移解决
        Else
            VBSCall GetCursorPos(a,b)
            //系统坐标位置,下面是看看如果按照虚拟鼠标和目的坐标之间的向量移动系统鼠标会不会出边界,
            //其实这句话的功能是防止虚拟鼠标在梦幻窗口但是,系统鼠标却不在,造成鼠标直接移到屏幕角了
            //如果出界就不按向量来移动,直接移动到目的坐标,等待下次从新移动
            If a+x-m>xMin and a+x-m<xMax and b+y-n>yMin and b+y-n<yMax
                MoveR x-m,y-n
                Delay 70
  //延时是必要的,因为我的笔记本电脑屏幕有延迟,如果不延时,找图时会出错,根据个人屏幕可以改动
            Else
                MoveTo x,y
            EndIf
        EndIf
    Else
     //下面是在找不到虚拟鼠标的情况下,通过把系统鼠标向屏幕内移动再次找到虚拟鼠标
     //这种情况是应对虚拟鼠标图形半出界的情况的,就是鼠标图形被边界遮了一半导致读不出虚拟鼠标的位置
     //我做的虚拟鼠标图是22*22的,用30可以把最出界的都移进屏幕
        VBSCall GetCursorPos(a,b)
        If a-xMin<30
            MoveR 30,0
        EndIf
        If xMax-a<30
            MoveR -30,0
        EndIf
        If b-yMin<30
            MoveR 0,30
        EndIf
        If yMax-b<30
            MoveR 0,-30
        EndIf
    EndIf
    Goto 仍然飘移
    Rem 漂移解决
Return
//使用的时候需要先把边界找到,可以在脚本的最开始得出来xMin,xMax,yMin,yMax的值
//使用例如:x=100
//          y=100
//          goSub 飘移   

//下面是位师傅的脚本
Sub 飘移
    rem 开始
    x1=3
    y1=22
    x2=643
    y2=502
    Rem 鼠标位子
//下面这几行都是求虚拟鼠标的坐标的,采用找点的方法,我自己试验了很多次,找不到了
//可能是梦幻不断跟新的结果,可以自己再抓色做一下,x1,x2,y1,y2是梦幻窗口的边界
//我觉得不应该设置成固定的,窗口移动的就会找不到了
    VBSCall FindColor(x1,y1,x2,y2,"c87c20",x3,y3)
    If x3>0 and y3>0
        IfColor x3+1,y3+1,A86c30,0
            IfColor x3+3,y3+3,804c28,0
                x3=x3-19-3
                y3=y3-18-3
//因为是找点,通过修正求出虚拟坐标箭头的坐标
            Else
                x1=x3+1
                y1=y3+1
//这里好像是把查找鼠标的面积减小就会找的更快吧
                Goto 鼠标位子
            EndIf
        Else
            x1=x3+1
            y1=y3+1
            Goto 鼠标位子
        EndIf
    Else
        Goto 鼠标位子
    EndIf
    Rem 鼠标位子计算
//下面是如果虚拟鼠标和目标坐标的距离在纵横坐标上大于50,就大致向目标方向移动
//移动的纵横距离可以改成10,20,50等,改的越大,移动的距离越远,每小步的漂移也越大,
//这里移动的方向都是45度角的倍数,也就是我上面提到的第二种方式,小步走,漂移小吧
//这样一直循环到纵横距离不大于50的时候结束
    x5=x-x3
    y5=y-y3
    VBS x4=Abs(x-x3)
    VBS y4=Abs(y-y3)
//Abs是用来求绝对值的,这样就方便了下面这一句,括号中的可以直接写成x5,y5
//如果不用上面这句求绝对值也可以把下面这句改成if x5>50 or x5<-50 or y5>50 or y5<50
    If x4>50 or y4>50
        If x5>10  
//想移动快点可以把这里的10全改成20,30,50之类的
            x5=10
        EndIf
        If x5<-10
            x5=-10
        EndIf
        If y5>10
            y5=10
        EndIf
        If y5<-10
            y5=-10
        EndIf
        MoveR x5,y5
        VBSCall GetCursorPos(x3,y3)
        Goto 鼠标位子计算
    EndIf
//下面是如果虚拟鼠标在误差范围内就表示解决漂移,程序结束
    If x4<4 and y4<4
    Else
//当虚拟鼠标和目标距离允许范围之外,继续循环去找虚拟鼠标的位置
        MoveR x5,y5
        Delay 100
//开始的时候我也不理解延时,觉得会使脚本速度减慢,后来发现是必要的
        Goto 鼠标位子
    EndIf
Return
回复

使用道具 举报

发表于 2013-3-2 09:41:18 | 显示全部楼层   广西壮族自治区柳州市
LZ啊,谢谢
回复

使用道具 举报

结帖率:43% (3/7)

签到天数: 3 天

发表于 2014-11-9 03:51:05 | 显示全部楼层   辽宁省辽阳市
qq506523074联系我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表