按键精灵教程炫舞类自动跳舞脚本Word文件下载.docx
《按键精灵教程炫舞类自动跳舞脚本Word文件下载.docx》由会员分享,可在线阅读,更多相关《按键精灵教程炫舞类自动跳舞脚本Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
![按键精灵教程炫舞类自动跳舞脚本Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/21/39eb2d1c-9fff-4d8b-b3d9-5704cb07772d/39eb2d1c-9fff-4d8b-b3d9-5704cb07772d1.gif)
大箭头:
箭头出现的个数有两种情况
只出现一个箭头:
按下对应的方向键即可
同时出现两个箭头:
上下箭头同时出现:
按下方向键上不放,然后按
方向键下,再松开方向键上
左右箭头同时出现:
按下方向键左不放,然后按
方向键右,再松开方向键左
3.游戏支持关闭背景
有背景的游戏画面:
没有背景的游戏画面:
注意:
关闭背景能减少cpu负荷,减少干扰,有利于脚本运行
4.游戏窗口如果是非激活的状态,画面被锁定,不接受键盘消息以及鼠标消息
绑定游戏
本例中用大漠插件来做后台脚本
首先,我们需要测试下,这个游戏要用什么绑定模式
小编测试了几种后台模式,发现键盘如果使用
"
windows"
绑定模式,
当游戏窗口处于非激活的状态下(窗口被遮挡),游戏画面会被锁定。
难道不能后台?
就当小编心如死灰之际,测试了dx模式
成了,键盘用dx模式之后,游戏窗口被遮挡游戏画面也不会被锁定
绑定模式:
图色模式:
dx2
鼠标模式:
dx
键盘模式:
绑定游戏窗口之前,要先激活游戏窗口之后再绑定
如果是非激活状态下(游戏画面锁定)绑定了窗口,需要点击下窗口标题栏激活窗口
获取箭头点阵信息,做字库
小编使用做字库的方式,来查找箭头
有童鞋看到这里可能会有疑问,为什么不用找图的方式呢?
其实,找图和找字的方式都可以。
小编喜欢用找字的方式,主要原因是因为找字的效率高于找图
好吧,我说实话,其实是因为我比较懒,小编觉得抠图老麻烦了~~
箭头的偏色还是相当厉害的,我们怎么才能获取到它的点阵呢?
小编使用的是HSV模式来计算偏色
根据计算
粉色箭头的偏色描述为:
308.57.100-25.60.10
蓝色箭头的偏色描述为:
180.60.100-25.60.0
用大漠工具提取图像点阵,我们发现它提取到的点阵范围大小是有限制的,
不能将整个箭头的点阵都提取到
那我们该提取那一部分呢?
粉色箭头
红色箭头小编提取的是箭头双角部分的点阵,
因为这部分点阵特征比较明显,识别起来准确度高
点阵信息命名为:
上(粉色大箭头用此点阵也能识别到)
粉色朝下的箭头也是提取双角部分的点阵
下
蓝色箭头
蓝色箭头小编提取的是箭头中部的点阵
左
蓝色往右方向的箭头也是提取箭头中部的点阵
右
但是问题来了,发现蓝色箭头有很多不能识别到
原来蓝色箭头还有另一种情况
箭头的中间部位有一条是白色的,所以偏色没有覆盖到(蓝色大箭头也是这种情况)
这种情况,小编提取了箭头上方角的部分,
大左(蓝色大箭头用此点阵也能识别到)
蓝色朝右的箭头也是提取箭头上方角的部分
大右
查找箭头
游戏画面里的箭头
有的时候出现一个,有的时候同时出现两个
所以,这里我们使用大漠的FindStrFastEx找字命令
这个命令,支持找多字
命令名称
FindStrFastEx
命令功能
区域找字
命令参数
x1:
区域的左上X坐标
y1:
区域的左上Y坐标
x2:
区域的右下X坐标
y2:
区域的右下Y坐标
string:
待查找的字符串,可以是字符串组合,比如"
长安|洛阳|大雁塔"
中间用"
|"
来分割字符串
color_format:
颜色格式串,可以包含换行分隔符,语法是"
"
后加分割字符串.
sim:
相似度,取值范围0.1-1.0
返回值
返回所有找到的坐标集合,格式如下:
id,x0,y0|id,x1,y1|......|id,xn,yn"
比如"
0,100,20|2,30,40"
表示找到了两个,第一个,对应的是序号为0的字符串,坐标是(100,20),
第二个是序号为2的字符串,坐标(30,40)
找字的范围怎么定?
我们观察下,箭头会出现的大概范围,发现并不是整个窗口都覆盖的
所以,小编设置的范围是:
91,59,1124,689
找字的范围尽可能小点,可以提高效率
我们找多字,所以命令中string这个参数,我们将需要找的字都填进去:
上|下|左|大左|右|大右"
Color_format参数,填写偏色描述,将粉色箭头和蓝色箭头的偏色描述一起填写进去:
180.60.100-25.60.0|308.57.100-25.60.10"
怎么知道找到的是哪个箭头?
怎么知道找到的箭头有几个?
如果只找到一个箭头,例如:
上箭头
我们看string这个参数里,上是在第一个,所以它的序号为0,而下的序号为1,以此类推
那么,FindStrFastEx命令的返回值就为:
0,x坐标,y坐标
我们需要将这个返回值分割,获取到“0”这个序号,才能判断出找到的是哪个箭头
如果同时找到了两个箭头,例如:
上箭头和下箭头
0,x坐标,y坐标|1,x坐标,y坐标
我们需要将返回值分割两次,第一次以
|
线为分割符号,第二次以
,号为分隔符
这样才能将两个箭头的序号获取到,然后根据序号判断是哪个箭头
看到这里,细心的童鞋一定发现了,如果找到两个箭头,FindStrFastEx命令的返回值里会出现一个竖线
如果只找到一个的话,就不会出现竖线,所以我们只要判断竖线有没有即可知道找到了几个箭头
按方向键
如果只找到一个箭头,我们判断是哪个箭头,然后按下对应的方向键即可
例如找到左箭头,我们就按方向键"
←"
如果同时找到了两个箭头,有两种情况
情况1:
上下箭头同时出现
情况2:
左右箭头同时出现
我们知道找字是从左往右,从上往下找,所以两个箭头同时出现时,先找到的是上/左箭头
所以我们判断找到的第一个箭头是上箭头还是左箭头
如果是上箭头,我们就按住
方向键"
↑"
不放,然后按下
↓"
,再松开
如果是左箭头,我们就按住
,然后按
→"
代码
Call注册大漠()
Setdm=CreateObject("
dm.dmsoft"
)'
创建大漠对象
dm_ret=dm.SetPath("
C:
\test_game\"
设置大漠全局路径
dm_ret=dm.SetDict(0,"
Touch.txt"
设置字库文件
Hwnd=Plugin.Window.Find("
UnityWndClass"
"
Touch"
获取Touch炫舞的窗口句柄
dm_ret=dm.SetWindowState(Hwnd,1)'
激活窗口
dm_ret=dm.BindWindow(Hwnd,"
dx2"
dx"
1)'
绑定窗口
Ifdm_ret=1Then
TracePrint"
绑定窗口成功"
Do
//查找箭头
dm_ret=dm.FindStrFastEx(91,59,1124,689,"
0.9)
Iflen(dm_ret)>
0Then
Delay200'
外圈还未收缩到内圈时就按键的情况下,调高延时。
相反则调低延时。
CallStrToArr(dm_ret)
IfUBound(ArrMap)=0Then'
1个箭头
SS=split(dm_ret,"
)
CallInputKey(CInt(SS(0)),0)
如果一个键判断了两次,导致按键错误的情况,调高延时
ElseifUBound(ArrMap)=1Then'
2个箭头
2键"
CallInputKey(CInt(ArrMap(0,0)),1)
================"
EndIf
EndIf
Loop
Else
绑定失败"
EndIf
//按方向键
SubInputKey(key,mode)
Ifmode=0then'
一个箭头
Ifkey=0Thendm.KeyPress38:
Ifkey=1Thendm.KeyPress40:
Ifkey=2orkey=3Thendm.KeyPress37:
Ifkey=4orkey=5Thendm.KeyPress39:
TracePrint"
Else'
两个个箭头
Ifkey=0Then'
判断是否是上箭头:
上箭头=0/左箭头=2
dm.Keydown38:
按下↑"
dm.Keypress40:
按↓"
dm.Keyup38:
松开↑"
左箭头
dm.Keydown37:
按下←"
dm.Keypress39:
按→"
dm.Keyup37:
松开←"
Endif
EndSub
//分割坐标字符串
SubStrToArr(字符串)
Dimi,j,ArrX,ArrY
ArrX=Split(字符串,"
Fori=0ToUBound(ArrX)
ArrY=Split(ArrX(i),"
Forj=0ToUBound(ArrY)
Ifj=0andi=0Then
RedimArrMap(UBound(ArrX),UBound(ArrY))
ArrMap(i,j)=ArrY(j)
next
Next
//注册大漠
Function注册大漠()
Dimi
PutAttachment"
\test_game"
*.*"
Setws=createobject("
Wscript.Shell"
Fori=0To20
ws.run("
regsvr32atl.dll-s"
ws.run("
regsvr32C:
\test_game\dm.dll-s"
Delay200
Setws=nothing
Setdm=createobject("
ver=dm.ver()
Ifver<
>
"
Then
ExitFor
Ifi>
=20Then
大漠插件注册失败!
EndScript
Setdm=nothing
Delay10
EndFunction
//释放大漠
SubOnScriptExit()
dm_ret=dm.UnBindWindow()
游戏设置:
1、外圈还未收缩到内圈时就按键的情况,需要调高延时。
每台电脑的情况不同,小编家里的笔记本电脑,延时设置为80毫秒就可以拿到高分
另一台台式电脑却需要设置为200毫秒
2、当按下方向键时,箭头消失的并没有我们想象中的快,
然后找字的判断速度会很快,这种情况下,很可能一个箭头会被循环找到两次
所以,当出现了这种情况,我们在按完键之后,需要加上一定的延时
本例子中的脚本初级版本,
对于游戏中有的箭头延时大有的箭头延时小,所导致的按键太迟
以及两个箭头出现的位置太粘合,所导致的另一个箭头来不及判断的情况暂未做处理