• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201504期】一帖教你做出炫舞类自动跳舞脚本 [复制链接]

1#

一帖教你做出炫舞类自动跳舞脚本

本文由按键学院提供技术支持


按键学院交流群(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:左右箭头同时出现

我们知道找字是从左往右,从上往下找,所以两个箭头同时出现时,先找到的是上/左箭头
所以我们判断找到的第一个箭头是上箭头还是左箭头
如果是上箭头,我们就按住
方向键 "↑"不放,然后按下 方向键 "↓",再松开 方向键 "↑"
如果是左箭头,我们就按住
方向键 "←",然后按 方向键 "→",再松开 方向键 "←"


代码
  1. Call 注册大漠()
  2. Set dm = CreateObject("dm.dmsoft")'创建大漠对象
  3. dm_ret = dm.SetPath("C:\test_game\")'设置大漠全局路径
  4. dm_ret = dm.SetDict(0,"Touch.txt")'设置字库文件
  5. Hwnd = Plugin.Window.Find("UnityWndClass", "Touch")'获取Touch炫舞的窗口句柄
  6. dm_ret = dm.SetWindowState(Hwnd,1) '激活窗口
  7. dm_ret = dm.BindWindow(Hwnd, "dx2", "dx", "dx", 1)'绑定窗口

  8. If dm_ret = 1 Then
  9. TracePrint "绑定窗口成功"
  10. Do
  11. //查找箭头
  12. dm_ret = dm.FindStrFastEx(91,59,1124,689, "上|下|左|大左|右|大右", "180.60.100-25.60.0|308.57.100-25.60.10", 0.9)
  13. If len(dm_ret) > 0 Then
  14. Delay 200 '外圈还未收缩到内圈时就按键的情况下,调高延时。相反则调低延时。
  15. Call StrToArr(dm_ret)
  16. If UBound(ArrMap) = 0 Then '1个箭头
  17. SS = split(dm_ret, ",")
  18. Call InputKey(CInt(SS(0)),0)
  19. Delay 200 '如果一个键判断了两次,导致按键错误的情况,调高延时
  20. Elseif UBound(ArrMap) = 1 Then '2个箭头
  21. TracePrint "2键"
  22. Call InputKey(CInt(ArrMap(0,0)),1)
  23. TracePrint "================"
  24. End If
  25. End If
  26. Loop
  27. Else
  28. TracePrint "绑定失败"
  29. End If


  30. //按方向键
  31. Sub InputKey(key,mode)
  32. If mode=0 then '一个箭头
  33. If key = 0 Then dm.KeyPress 38 :TracePrint "↑"
  34. If key = 1 Then dm.KeyPress 40 :TracePrint "↓"
  35. If key = 2 or key = 3 Then dm.KeyPress 37 :TracePrint "←"
  36. If key = 4 or key = 5 Then dm.KeyPress 39 : TracePrint "→"
  37. Else '两个个箭头
  38. If key = 0 Then '判断是否是上箭头:上箭头=0 /左箭头=2
  39. dm.Keydown 38:TracePrint "按下↑"
  40. dm.Keypress 40:TracePrint "按↓"
  41. dm.Keyup 38:TracePrint "松开↑"
  42. Else '左箭头
  43. dm.Keydown 37:TracePrint "按下←"
  44. dm.Keypress 39:TracePrint "按→"
  45. dm.Keyup 37:TracePrint "松开←"
  46. End If
  47. End if
  48. End Sub

  49. //分割坐标字符串
  50. Sub StrToArr(字符串)
  51. Dim i, j, ArrX, ArrY
  52. ArrX = Split(字符串, "|")
  53. For i = 0 To UBound(ArrX)
  54. ArrY = Split(ArrX(i), ",")
  55. For j = 0 To UBound(ArrY)
  56. If j = 0 and i = 0 Then
  57. Redim ArrMap(UBound(ArrX),UBound(ArrY))
  58. End If
  59. ArrMap(i, j) = ArrY(j)
  60. next
  61. Next
  62. End Sub

  63. //注册大漠
  64. Function 注册大漠()
  65. Dim i
  66. PutAttachment "C:\test_game", "*.*"
  67. Set ws = createobject("Wscript.Shell")
  68. For i = 0 To 20
  69. ws.run("regsvr32 atl.dll -s")
  70. ws.run ("regsvr32 C:\test_game\dm.dll -s")
  71. Delay 200
  72. Set ws = nothing
  73. Set dm = createobject("dm.dmsoft")
  74. ver = dm.ver()
  75. If ver


    Q文件下载:

    您所在的用户组无法下载或查看附件

    游戏设置:
    您所在的用户组无法下载或查看附件

    您所在的用户组无法下载或查看附件

    您所在的用户组无法下载或查看附件


    注意:
    1、外圈还未收缩到内圈时就按键的情况,需要调高延时。
    每台电脑的情况不同,小编家里的笔记本电脑,延时设置为80毫秒就可以拿到高分
    另一台台式电脑却需要设置为200毫秒


    2、当按下方向键时,箭头消失的并没有我们想象中的快,

    然后找字的判断速度会很快,这种情况下,很可能一个箭头会被循环找到两次

    所以,当出现了这种情况,我们在按完键之后,需要加上一定的延时





    本例子中的脚本初级版本,

    对于游戏中有的箭头延时大有的箭头延时小,所导致的按键太迟

    以及两个箭头出现的位置太粘合,所导致的另一个箭头来不及判断的情况暂未做处理


    您所在的用户组无法下载或查看附件








     

    谢谢大家阅读,记得给小编送支花花 ! 顺手点个

    按键学院基础班第4期火热招生

    回实战班:回合制通用教学火热报名

    招生对象:零基础用户
    招生人数:99人
    学习日期:两个月(2015.3.16-2015.5.16)
    上课时间:周1、周3、周5 19:30--21:30
    导师:工程师06
    实战游戏:飞扬神途
    http://www.feiyangst.com/
    本期重点:回合制游戏--神武
    学习时效:终生有效
    上课时间:周2、周4、周6的 20:00--22:00
    导师:工程师07
    技术支持:果儿(院刊编辑)
    点我进入按键学院报名啦 招生细节进群咨询招生办主任:2群-372671254(优先加入) 1群-376122403





    已有4评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/5/5 8:43:25 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    方法反反复复凤飞飞

    3#

    看看吧,

    4#


    5#

    支持学习下,感谢分享

    6#

    看看学习

    7#

    虚心接受的学习

    8#

    11111111111111111

    9#

    股份大股东士大夫

    熊家班熊叫兽
    10#


    11#

    虚心接受的学习下

    12#

    虚心接受的学习下

    13#

    ???????????

    14#

    游戏窗口如果是非激活的状态,画面被锁定,不接受键盘消息以及鼠标消息

    15#

    zxcasd

    16#

    啦啦啦啦啦啦

    17#

    123123123121 3333333333333333333

    18#

    一帖教你做出炫舞类自动跳舞脚本修改

    19#

    谢谢

    20#

    学习学习

    发新话题 回复该主题