TC官方合作论坛
标题:
冷月深夜贴之鼠标漂移详解
[打印本页]
作者:
冷月无痕
时间:
2012-3-27 06:23
标题:
冷月深夜贴之鼠标漂移详解
最近这段时间沉寂了很久的鼠标漂移话题又火热了起来!每天都有N多人在追问怎么解决梦幻鼠标漂移的问题!(特别是Q群里的无处藏身和YY里的风吹沙,这两个ID是同一个人?)
首先!在正式进入本章话题之前,冷月照例还得叽歪一些题外话!咳...咳...我们想要解决一个问题,必须先要去了解它,知道它的原因,分析它的内容,才可能找到解决的方法!我很理解大家迫切想知道答案的心情,但是也请大家在向别人索要源码而被拒绝的时候,心态放平衡一点,要知道授人以鱼不如授人以渔,再说了,别人的辛劳成果怎么会无缘无故的拿出来分享呢?(冷月的代码一向卖得很贵滴:P )
咳...咳...扯远了,那么现在开始今天的话题,梦幻问道鼠标漂移问题的解决方法!
还是那句话首先我们必须了解什么是鼠标漂移!好,为了让大家有个直观的认识,我们先上一张图:
[attach]2653[/attach]
这一张用TC抓色器抓取梦幻西游的图,大家仔细看,在游戏窗口里,游戏的鼠标指针位置是宠物血条的一半左右位置,而抓色器上鼠标指针都快指到了宠物头像边框了!
这就是著名的鼠标漂移了,因为游戏鼠标位置和电脑鼠标位置在屏幕上是不一样的,所以我们脚本用移动鼠标命令是不能让游戏鼠标移动到对应位置的!
那么我们应该怎么解决这个问题呢?首先!通过度娘我们可以了解鼠标漂移的三个特点!(有问题找度娘!没错的!)
一,系统鼠标(也就是电脑鼠标)与虚拟鼠标(也就是游戏鼠标)之间的漂移量(也就是差值)是随机的!
二,虚拟鼠标的移动距离越短,差值越小
三,越靠近游戏窗口边框,差值越大
现在主流的解决鼠标漂移方案就是利用它的第二个特点,让系统鼠标坐标无限接近虚拟鼠标坐标,称作无限渐进法!
当然,解决鼠标漂移的方法有很多,最简单犀利的当属我们TC大神"梦想飞舞"的WIN键法(
点击进入原帖
),我称之为"上帝之键":P
好了,我们还是说回无限渐进法,首先,我们必须得到虚拟鼠标(游戏鼠标)的坐标(这里是屏幕坐标,后台的话需要换算),最准确的方法当然是读内存(如果你会的话应该就不用来看我这个贴了),还有就是大众话的找图,多点找色了!对于梦幻的鼠标指针,不但会变色,而且状态多样,有剑状的,有手指状的等等等等,(告诉你一个确切数字一共有三十多张图!),当然懂PS的可以把会变色的部份抠掉,这样就大大的减少了图片量,但是个人建议还是多点找色的好!多点找色就找鼠标上不会变色部份的几个点,不同状态的都要找!
基本思路:
一,获得虚拟鼠标(游戏鼠标)的当前坐标
二,判断虚拟鼠标当前坐标与目标坐标的差值是否在我们设定的范围内!(因为是无限接近,所以我们允许一个差值)
三,利用相对移动命令控制虚拟鼠标逼近目标坐标!
好了,鼠标漂移分析完了,下面?下面就上代码了,很多人都说冷月上代码都不加注释的!额,我从来上的可都是纯中文代码吖!比起那些大神们的E文代码我以为大家都能看得懂了,好吧,这一次,加注释!
代码如下:
功能 漂移至(目标x,目标y)
是否成功
虚鼠x,虚鼠y,过鼠x,过鼠y,实鼠x,实鼠y
//虚鼠x,虚鼠y就是游戏鼠标坐标通过多点找色获得
//过鼠x,过鼠y用来过度的鼠标坐标,实鼠x,实鼠y系统鼠标坐标
循环((目标x-虚鼠x)*(目标x-虚鼠x)+(目标y-虚鼠y)*(目标y-虚鼠y)>4)
//为什么要相乘呢?如果出现负值,乘一下就负负得正了嘛:)当然你也可以用绝对值命令
//这里循环的条件就是目标坐标和虚拟鼠标的坐标差值小于2就跳出循环,说明我们已经移动到位置了
是否成功=图像.多点找色(0,0,800,600,#c87c20,"1|1|A86c30,3|3|804c28",0.9,0,过鼠x,过鼠y)
如果(是否成功)
虚鼠x=过鼠x-22
虚鼠y=过鼠y-21
//通过多点找色获得游戏鼠标当前坐标,这只是个举例,大家根据自己的需要去得到游戏鼠标当前坐标,可以用找图,也可以找内存!
//有人又要问了,这里为什么要+22,+21呢?因为这里用的是找点,所以我们要通过修正求出虚拟鼠标箭头的坐标
否则
返回 假
//找不到虚拟鼠标,函数执行失败,返回假
//这里你也可以移动鼠标到一个窗口中间的位置,以防鼠标被窗口边框遮挡出现找不到鼠标的情况
如果结束
鼠标.获取坐标(实鼠x,实鼠y)
//得到系统鼠标坐标
如果(目标x>700||目标x<100||目标y>500||目标y<80)
//这里的条件就是所谓的边框位置了,如果目标坐标接近边框,那么我们就不能一次移动太多
如果(实鼠x>800||实鼠y>600)
鼠标.移动(目标x,目标y)
//这里的游戏窗口是设置在0,0的位置,800,600是游戏窗口的最大坐标
//如果没有设置窗口位置那么还要设置一个最小坐标防出界
//为什么要用系统鼠标来判断是否出界呢?
//因为虚拟鼠标出界时,可能会被窗口边框遮挡一部分出现找不到虚拟鼠标的情况
//这里的条件是如果出界了,直接移动系统鼠标到目标位置
辅助.等待(50)
否则
如果(虚鼠x>700||虚鼠x<100||虚鼠y>500||虚鼠y<80)
//判断虚拟鼠标是否进入边框区
鼠标.相对移动((目标x-虚鼠x)*0.92/2,(目标y-虚鼠y)*0.92/2)
//因为进入边框区了,所以缩小鼠标移动的距离,减少漂移差值
否则
鼠标.相对移动((目标x-虚鼠x)*0.92,(目标y-虚鼠y)*0.92)
//这里为什么差值要乘以0.92呢?这是为了提高准确率,这个值可以是0.5-0.99之间
//其实也是以前冷月老帖子里那个让人郁闷的-21,-14
辅助.等待(50)
如果结束
如果结束
如果结束
循环结束
返回 真
功能结束
这段代码当然不能算得上很完善(本来通过找图色得到梦幻鼠标坐标就是个技术活),反正原理已经告诉大家了,只是给大家一个参考!
总之通过不断的调试修改,我相信大家一定写出完美的梦幻鼠标漂移代码来!
晕,标题写的是深夜贴,写完抬头一看,天都快亮了!洗洗睡了!<img src=-)" alt="" />
作者:
lyf1314
时间:
2012-3-27 08:53
不错不错
作者:
开心小鱼
时间:
2012-3-27 09:03
深奥哦
作者:
Abin
时间:
2012-3-27 09:18
很好的帖子啊!! 膜拜楼主啊!!! :rose
作者:
流冰
时间:
2012-3-27 09:40
顶了再看几遍
作者:
gazsummer
时间:
2012-3-27 09:51
慢慢学习
作者:
cchao2627
时间:
2012-3-27 09:58
我想成会员。
作者:
zx_fy
时间:
2012-3-27 10:27
受教受教
作者:
wscbc1978
时间:
2012-3-27 12:39
牛人,牛帖
作者:
小西
时间:
2012-3-27 15:29
很好的帖子啊!! 膜拜楼主啊!!!:rose
作者:
popo014
时间:
2012-3-27 15:36
果真很牛- -膜拜中=。= 感谢楼主分享知识
作者:
ldongh
时间:
2012-3-27 18:08
谢谢楼主分享 不知道是我没弄好还是怎么搞的 老是不成功 找色找不到 请问下楼主测试过么
作者:
冷月无痕
时间:
2012-3-27 18:42
回复
12楼
ldongh
的帖子
我注释说明了 那只是举例 你得自己找
作者:
无处藏身
时间:
2012-3-28 13:46
写是写出来了.但是问题出现了.鼠标形状太多了...麻烦啊.不过原理知道了总是好的
作者:
无处藏身
时间:
2012-3-28 14:04
死在黎明前
作者:
zx_fy
时间:
2012-3-28 14:54
14楼的真是牛,我还没闹明白呢。。。
作者:
冷月无痕
时间:
2012-3-28 15:57
回复
12楼
ldongh
的帖子
找图一共要截三十多张图,听说可以找鼠标特征码,你可以去试试
作者:
zx_fy
时间:
2012-3-29 13:15
:-|汗!有那么多鼠标图形啊?我一直以为就四种:1是常见的蓝色小鼠、2是战斗时的匕首小鼠和风扇叶型小鼠,3及手指型小鼠;看来不光学TC是小白。。。:-|:-|
作者:
showmar
时间:
2012-3-31 19:57
感谢分享,不吝授教.
不知道没次移动量为1怎么样,虽然速度慢点
作者:
lyttt
时间:
2012-3-31 22:42
我遇到个情况,当用宽屏显示器玩游戏和用普屏显示器玩会有一点区别,用宽屏的经常会出现,鼠标点命令的时候,箭头不是正好点再命令上的,有时候要移动下,命令条才亮,用普屏的时候很少出现,这是不是鼠标漂移的成因呢?
作者:
blue_1
时间:
2012-7-26 17:48
找到个有解释的了
作者:
chw
时间:
2012-8-1 11:15
写了一段,偶尔会有问题····
作者:
zuxiastu
时间:
2012-10-1 02:54
谢谢楼主的无私奉献。
作者:
zuxiastu
时间:
2012-10-1 21:10
研究了一晚上。没成功。汗
作者:
lfddong
时间:
2012-10-7 15:20
崇拜中……
作者:
lzq5628989
时间:
2012-10-10 16:11
学习中,,在看一遍
作者:
wudongdonghehe
时间:
2012-10-22 13:16
回复
4楼
Abin
的帖子
在我看来,你们俩都是大神,唉,神的世界啊。
作者:
jxwwdt
时间:
2012-11-19 07:23
再次看冷月贴
作者:
armlin
时间:
2013-2-24 15:31
好贴
作者:
lidongxu
时间:
2013-3-20 09:14
很好的帖子
作者:
laowantong
时间:
2013-3-21 12:18
学习
作者:
cybkk
时间:
2013-4-18 19:43
大大是大
作者:
dengdaijihui
时间:
2013-4-27 01:00
顶 虽然我看不懂。。。
作者:
donald_tangmao
时间:
2013-5-19 00:09
看不懂..........
作者:
853692686
时间:
2013-5-29 15:43
学习了
作者:
fupinggui
时间:
2013-8-30 10:32
收藏了
作者:
T星人
时间:
2014-11-9 00:17
我只能膜拜了, 讲得非常深入
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1