- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2015-03-23 15:04
|
|只看楼主
一帖教你做出炫舞类自动跳舞脚本 本文由按键学院提供技术支持 按键学院交流群(1群已满):376122403
零基础学按键精灵群(2群):372671254 跳舞类游戏的脚本要怎么写呢? 带着这个疑问,小编找了一款十分炫酷的网页游戏《Touch炫舞》 游戏画面真是带感,还有那音乐,那妹子的舞姿……啧啧,好妖娆好妩媚……
好吧,扯远了, 接下来我们进入今天的主题 分享下《Touch炫舞》自动跳舞脚本的制作流程
由于本帖图片比较多,请各位看官耐心等待图片加载~~
|
| 流程 1、分析游戏 2、绑定游戏 3、获取箭头的点阵信息,做成字库 4、查找箭头 游戏画面只出现一个箭头的处理方法 游戏画面出现两个箭头的处理方法
| 分析游戏 【游戏画面】- 您所在的用户组无法下载或查看附件
【游戏规则】 1.当箭头的外圈,收缩到箭头内圈时,按下对应的方向键则可以获得最高分。 如果外圈还未收缩到内圈时就按下方向键,则获得一般评价。 如果外圈收缩到箭头中心点消失不见时,还未按下方向键,则不得分。
- 您所在的用户组无法下载或查看附件
2.根据歌曲的难度,箭头消失的速度,箭头的个数和复杂程度各不相同。 今天的例子,是以难度为1的歌曲作为操作对象 难度为1的歌曲: 箭头有两种颜色,粉色和蓝色,上下键为粉色,左右键为蓝色 - 您所在的用户组无法下载或查看附件
箭头有普通箭头和大箭头 普通箭头: - 您所在的用户组无法下载或查看附件
大箭头: - 您所在的用户组无法下载或查看附件
箭头出现的个数有两种情况 只出现一个箭头: 按下对应的方向键即可 同时出现两个箭头: 上下箭头同时出现:按下方向键上不放,然后按 方向键下,再松开方向键上 左右箭头同时出现:按下方向键左不放,然后按 方向键右,再松开方向键左 - 您所在的用户组无法下载或查看附件
3.游戏支持关闭背景 有背景的游戏画面: - 您所在的用户组无法下载或查看附件
没有背景的游戏画面: - 您所在的用户组无法下载或查看附件
注意:关闭背景能减少cpu负荷,减少干扰,有利于脚本运行 4.游戏窗口如果是非激活的状态,画面被锁定,不接受键盘消息以及鼠标消息 - 您所在的用户组无法下载或查看附件
绑定游戏 本例中用大漠插件来做后台脚本 首先,我们需要测试下,这个游戏要用什么绑定模式
|
关于如何测试窗口的绑定模式, 详情请查看相关院刊: 【院刊】-【201501期】沙盘后台绑定游戏
小编测试了几种后台模式,发现键盘如果使用 "windows"绑定模式, 当游戏窗口处于非激活的状态下(窗口被遮挡),游戏画面会被锁定。
难道不能后台? 就当小编心如死灰之际,测试了dx模式
成了,键盘用dx模式之后,游戏窗口被遮挡游戏画面也不会被锁定
绑定模式: 图色模式:dx2 鼠标模式:dx 键盘模式:dx 注意: 绑定游戏窗口之前,要先激活游戏窗口之后再绑定 如果是非激活状态下(游戏画面锁定)绑定了窗口,需要点击下窗口标题栏激活窗口 获取箭头点阵信息,做字库
小编使用做字库的方式,来查找箭头 有童鞋看到这里可能会有疑问,为什么不用找图的方式呢? 其实,找图和找字的方式都可以。 小编喜欢用找字的方式,主要原因是因为找字的效率高于找图
好吧,我说实话,其实是因为我比较懒,小编觉得抠图老麻烦了~~
| 箭头的偏色还是相当厉害的,我们怎么才能获取到它的点阵呢? 关于提取偏色文字/图像的点阵信息的方法, 请查看相关院刊: 【RGB模式处理偏色】【院刊】-【201409期】如何识别渐变色或半透明的文字 【HSV模式处理偏色】【院刊】-【201502期】HSV搞定偏色,简单暴-力! 小编使用的是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”这个序号,才能判断出找到的是哪个箭头 如果同时找到了两个箭头,例如:上箭头和下箭头 那么,FindStrFastEx命令的返回值就为: 0,x坐标,y坐标|1,x坐标,y坐标 我们需要将返回值分割两次,第一次以 | 线为分割符号,第二次以 ,号为分隔符 这样才能将两个箭头的序号获取到,然后根据序号判断是哪个箭头 两次分割的例子,咱们之前的帖子也写过一篇,有兴趣的童鞋可以去看一看~ 【院刊】-【201410期】如何循环点击无规律的坐标呢? 看到这里,细心的童鞋一定发现了,如果找到两个箭头,FindStrFastEx命令的返回值里会出现一个竖线 如果只找到一个的话,就不会出现竖线,所以我们只要判断竖线有没有即可知道找到了几个箭头
按方向键 如果只找到一个箭头,我们判断是哪个箭头,然后按下对应的方向键即可 例如找到左箭头,我们就按 方向键 "←"
如果同时找到了两个箭头,有两种情况 情况1:上下箭头同时出现 情况2:左右箭头同时出现
我们知道找字是从左往右,从上往下找,所以两个箭头同时出现时,先找到的是上/左箭头 所以我们判断找到的第一个箭头是上箭头还是左箭头 如果是上箭头,我们就按住 方向键 "↑"不放,然后按下 方向键 "↓",再松开 方向键 "↑" 如果是左箭头,我们就按住 方向键 "←",然后按 方向键 "→",再松开 方向键 "←"
| 代码- 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_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(SS(0)),0)
- Delay 200 '如果一个键判断了两次,导致按键错误的情况,调高延时
- Elseif UBound(ArrMap) = 1 Then '2个箭头
- TracePrint "2键"
- Call InputKey(CInt(ArrMap(0,0)),1)
- TracePrint "================"
- End If
- End If
- Loop
- Else
- 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 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 /左箭头=2
- dm.Keydown 38:TracePrint "按下↑"
- dm.Keypress 40:TracePrint "按↓"
- dm.Keyup 38:TracePrint "松开↑"
- Else '左箭头
- dm.Keydown 37:TracePrint "按下←"
- dm.Keypress 39:TracePrint "按→"
- dm.Keyup 37:TracePrint "松开←"
- End If
- End if
- End Sub
- //分割坐标字符串
- Sub StrToArr(字符串)
- Dim i, j, ArrX, ArrY
- ArrX = Split(字符串, "|")
- For i = 0 To UBound(ArrX)
- ArrY = Split(ArrX(i), ",")
- For j = 0 To UBound(ArrY)
- If j = 0 and i = 0 Then
- Redim ArrMap(UBound(ArrX),UBound(ArrY))
- End If
- ArrMap(i, j) = ArrY(j)
- next
- Next
- End Sub
- //注册大漠
- Function 注册大漠()
- Dim i
- PutAttachment "C:\test_game", "*.*"
- Set ws = createobject("Wscript.Shell")
- For i = 0 To 20
- ws.run("regsvr32 atl.dll -s")
- ws.run ("regsvr32 C:\test_game\dm.dll -s")
- Delay 200
- Set ws = nothing
- Set dm = createobject("dm.dmsoft")
- ver = dm.ver()
- If ver
Q文件下载: - 您所在的用户组无法下载或查看附件
游戏设置: - 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
- 您所在的用户组无法下载或查看附件
注意: 1、外圈还未收缩到内圈时就按键的情况,需要调高延时。 每台电脑的情况不同,小编家里的笔记本电脑,延时设置为80毫秒就可以拿到高分 另一台台式电脑却需要设置为200毫秒
2、当按下方向键时,箭头消失的并没有我们想象中的快, 然后找字的判断速度会很快,这种情况下,很可能一个箭头会被循环找到两次 所以,当出现了这种情况,我们在按完键之后,需要加上一定的延时
本例子中的脚本初级版本, 对于游戏中有的箭头延时大有的箭头延时小,所导致的按键太迟 以及两个箭头出现的位置太粘合,所导致的另一个箭头来不及判断的情况暂未做处理
- 您所在的用户组无法下载或查看附件
谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞
|