1、按键精灵教程炫舞类自动跳舞脚本按键精灵教程:炫舞类自动跳舞脚本来源:按键学院【按键精灵】跳舞类游戏的脚本要怎么写呢?带着这个疑问,小编找了一款十分炫酷的网页游戏Touch炫舞游戏画面真是带感,还有那音乐,那妹子的舞姿啧啧,好妖娆好妩媚好吧,扯远了,接下来我们进入今天的主题分享下Touch炫舞自动跳舞脚本的制作流程由于本帖图片比较多,请各位看官耐心等待图片加载流程1、分析游戏2、绑定游戏3、获取箭头的点阵信息,做成字库4、查找箭头 游戏画面只出现一个箭头的处理方法 游戏画面出现两个箭头的处理方法分析游戏【游戏画面】【游戏规则】 1.当箭头的外圈,收缩到箭头内圈时,按下对应的方向键则可以获得最高分
2、。 如果外圈还未收缩到内圈时就按下方向键,则获得一般评价。 如果外圈收缩到箭头中心点消失不见时,还未按下方向键,则不得分。2.根据歌曲的难度,箭头消失的速度,箭头的个数和复杂程度各不相同。 今天的例子,是以难度为1的歌曲作为操作对象 难度为1的歌曲: 箭头有两种颜色,粉色和蓝色,上下键为粉色,左右键为蓝色箭头有普通箭头和大箭头普通箭头:大箭头:箭头出现的个数有两种情况只出现一个箭头:按下对应的方向键即可 同时出现两个箭头:上下箭头同时出现:按下方向键上不放,然后按方向键下,再松开方向键上左右箭头同时出现:按下方向键左不放,然后按方向键右,再松开方向键左3.游戏支持关闭背景 有背景的游戏画面:
3、没有背景的游戏画面:注意:关闭背景能减少cpu负荷,减少干扰,有利于脚本运行4.游戏窗口如果是非激活的状态,画面被锁定,不接受键盘消息以及鼠标消息 绑定游戏本例中用大漠插件来做后台脚本首先,我们需要测试下,这个游戏要用什么绑定模式小编测试了几种后台模式,发现键盘如果使用windows绑定模式,当游戏窗口处于非激活的状态下(窗口被遮挡),游戏画面会被锁定。难道不能后台?就当小编心如死灰之际,测试了dx模式成了,键盘用dx模式之后,游戏窗口被遮挡游戏画面也不会被锁定绑定模式:图色模式:dx2鼠标模式:dx键盘模式:dx注意:绑定游戏窗口之前,要先激活游戏窗口之后再绑定如果是非激活状态下(游戏画面锁
4、定)绑定了窗口,需要点击下窗口标题栏激活窗口获取箭头点阵信息,做字库小编使用做字库的方式,来查找箭头有童鞋看到这里可能会有疑问,为什么不用找图的方式呢?其实,找图和找字的方式都可以。小编喜欢用找字的方式,主要原因是因为找字的效率高于找图好吧,我说实话,其实是因为我比较懒,小编觉得抠图老麻烦了箭头的偏色还是相当厉害的,我们怎么才能获取到它的点阵呢?小编使用的是HSV模式来计算偏色根据计算粉色箭头的偏色描述为:308.57.100-25.60.10蓝色箭头的偏色描述为:180.60.100-25.60.0用大漠工具提取图像点阵,我们发现它提取到的点阵范围大小是有限制的,不能将整个箭头的点阵都提取到
5、那我们该提取那一部分呢?粉色箭头红色箭头小编提取的是箭头双角部分的点阵,因为这部分点阵特征比较明显,识别起来准确度高点阵信息命名为:上(粉色大箭头用此点阵也能识别到)粉色朝下的箭头也是提取双角部分的点阵点阵信息命名为:下蓝色箭头蓝色箭头小编提取的是箭头中部的点阵点阵信息命名为:左蓝色往右方向的箭头也是提取箭头中部的点阵点阵信息命名为:右 但是问题来了,发现蓝色箭头有很多不能识别到原来蓝色箭头还有另一种情况箭头的中间部位有一条是白色的,所以偏色没有覆盖到(蓝色大箭头也是这种情况)这种情况,小编提取了箭头上方角的部分,点阵信息命名为:大左(蓝色大箭头用此点阵也能识别到)蓝色朝右的箭头也是提取箭头上
6、方角的部分点阵信息命名为:大右查找箭头游戏画面里的箭头有的时候出现一个,有的时候同时出现两个所以,这里我们使用大漠的FindStrFastEx找字命令这个命令,支持找多字命令名称FindStrFastEx命令功能区域找字命令参数x1 :区域的左上X坐标y1 :区域的左上Y坐标x2 :区域的右下X坐标y2 :区域的右下Y坐标string :待查找的字符串, 可以是字符串组合,比如长安|洛阳|大雁塔,中间用|来分割字符串color_format :颜色格式串, 可以包含换行分隔符,语法是,后加分割字符串.sim :相似度,取值范围0.1-1.0返回值返回所有找到的坐标集合,格式如下:id,x0,y
7、0|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
8、.100-25.60.10怎么知道找到的是哪个箭头?怎么知道找到的箭头有几个?如果只找到一个箭头,例如:上箭头我们看string这个参数里,上是在第一个,所以它的序号为0,而下的序号为1,以此类推那么,FindStrFastEx命令的返回值就为: 0,x坐标,y坐标我们需要将这个返回值分割,获取到“0”这个序号,才能判断出找到的是哪个箭头如果同时找到了两个箭头,例如:上箭头和下箭头那么,FindStrFastEx命令的返回值就为:0,x坐标,y坐标|1,x坐标,y坐标我们需要将返回值分割两次,第一次以|线为分割符号,第二次以,号为分隔符这样才能将两个箭头的序号获取到,然后根据序号判断是哪个箭头
9、看到这里,细心的童鞋一定发现了,如果找到两个箭头,FindStrFastEx命令的返回值里会出现一个竖线如果只找到一个的话,就不会出现竖线,所以我们只要判断竖线有没有即可知道找到了几个箭头按方向键如果只找到一个箭头,我们判断是哪个箭头,然后按下对应的方向键即可例如找到左箭头,我们就按方向键 如果同时找到了两个箭头,有两种情况情况1:上下箭头同时出现情况2:左右箭头同时出现我们知道找字是从左往右,从上往下找,所以两个箭头同时出现时,先找到的是上/左箭头所以我们判断找到的第一个箭头是上箭头还是左箭头如果是上箭头,我们就按住方向键 不放,然后按下方向键 ,再松开方向键 如果是左箭头,我们就按住方向键
10、 ,然后按方向键 ,再松开方向键 代码Call 注册大漠()Set dm = 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, dx, 1)绑定窗口If dm_
11、ret = 1 Then TracePrint 绑定窗口成功 Do /查找箭头dm_ret = dm.FindStrFastEx(91,59,1124,689, 上|下|左|大左|右|大右, 180.60.100-25.60.0|308.57.100-25.60.10, 0.9) If len(dm_ret) 0 Then Delay 200 外圈还未收缩到内圈时就按键的情况下,调高延时。相反则调低延时。 Call StrToArr(dm_ret) If UBound(ArrMap) = 0 Then 1个箭头 SS = split(dm_ret, ,) Call InputKey(CInt(
12、SS(0),0) Delay 200 如果一个键判断了两次,导致按键错误的情况,调高延时ElseifUBound(ArrMap) = 1 Then 2个箭头TracePrint 2键 Call InputKey(CInt(ArrMap(0,0),1)TracePrint = End If End If LoopElse TracePrint 绑定失败End If/按方向键Sub InputKey(key,mode) If mode=0 then 一个箭头 If key = 0 Then dm.KeyPress 38 :TracePrint If key = 1 Then dm.KeyPress
13、 40 :TracePrint If key = 2 or key = 3 Then dm.KeyPress 37 :TracePrint If key = 4 or key = 5 Then dm.KeyPress 39 : TracePrint Else 两个个箭头 If key = 0 Then 判断是否是上箭头:上箭头=0 /左箭头=2dm.Keydown 38:TracePrint 按下dm.Keypress 40:TracePrint 按dm.Keyup 38:TracePrint 松开 Else 左箭头dm.Keydown 37:TracePrint 按下dm.Keypress
14、39:TracePrint 按dm.Keyup 37:TracePrint 松开 End If End ifEnd Sub/分割坐标字符串Sub StrToArr(字符串) Dim i, j, ArrX, ArrYArrX = Split(字符串, |) For i = 0 To UBound(ArrX)ArrY = Split(ArrX(i), ,) For j = 0 To UBound(ArrY) If j = 0 and i = 0 ThenRedimArrMap(UBound(ArrX),UBound(ArrY) End IfArrMap(i, j) = ArrY(j) next N
15、extEnd Sub/注册大漠Function 注册大漠() Dim iPutAttachment C:test_game, *.* Set ws = createobject(Wscript.Shell) For i = 0 To 20ws.run(regsvr32 atl.dll -s)ws.run (regsvr32 C:test_gamedm.dll -s) Delay 200 Set ws = nothing Set dm = createobject(dm.dmsoft)ver = dm.ver() If ver Then Exit For End If Next If i= 20
16、 Then TracePrint 大漠插件注册失败!EndScript End If Set dm = nothing Delay 10End Function/释放大漠Sub OnScriptExit()dm_ret = dm.UnBindWindow() End Sub游戏设置:注意:1、外圈还未收缩到内圈时就按键的情况,需要调高延时。 每台电脑的情况不同,小编家里的笔记本电脑,延时设置为80毫秒就可以拿到高分 另一台台式电脑却需要设置为200毫秒2、当按下方向键时,箭头消失的并没有我们想象中的快, 然后找字的判断速度会很快,这种情况下,很可能一个箭头会被循环找到两次 所以,当出现了这种情况,我们在按完键之后,需要加上一定的延时本例子中的脚本初级版本,对于游戏中有的箭头延时大有的箭头延时小,所导致的按键太迟以及两个箭头出现的位置太粘合,所导致的另一个箭头来不及判断的情况暂未做处理
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1