按键精灵2014
方法11、我们观察下游戏里,人物在行走的时候会变化,停止的时候不会变化的区域是哪里。2、获取这块区域里的任意几个颜色点3、判断第一次获取和第二次获取到的点的颜色值是不是一样的: 如果你要判断区域里的四个点有没有变化,那么先定义八个变量 前四个变量用于记录第一次读取到的四个点的颜色值 后四个变量用于记录第二次读取到的四个点的颜色值 然后将两次获取到的值进行对比,对比结果一样则说明人物未移动
代码:Do TracePrint 判断人物行进状态()LoopFunction 判断人物行进状态() Dim i, j,ColorA1,ColorB1, ColorC1, ColorD1,ColorA2, ColorB2, ColorC2, ColorD2 For i = 0 To 1 j = 0 ColorA1 = ColorA2 ColorB1 = ColorB2 ColorC1 = ColorC2 ColorD1 = ColorD2 ColorA2 = Plugin.Color.GetPixelColor(198, 63,0) ColorB2 = Plugin.Color.GetPixelColor(375,155,0) ColorC2 = Plugin.Color.GetPixelColor(204,360,0) ColorD2 = Plugin.Color.GetPixelColor(508,525,0) If ColorA1 = ColorA2 Then j = j + 1 End If If ColorB1 = ColorB2 Then j = j + 1 End If If ColorC1 = ColorC2 Then j = j + 1 End If If ColorD1 = ColorD2 Then j = j + 1 End If If j >= 2 Then 判断人物行进状态 = 0 //停止行走 Exit Function End If Next 判断人物行进状态 = 1 //行走中End Function
注意: 例子中,小编获取了四个颜色点进行判断, 不是说要固定四个点,你想五个也可以六个也可以 不过不建议点的数量过少,例如2个点,如果这两个点刚好都没有变化呢?就会造成错误的判断
方法2使用大漠插件的IsDisplayDead函数来判断区域里的图像是不是在变化上一期院刊中,我们就是这个函数来判断人物的行走状态的命令名称IsDisplayDead命令功能判断指定的区域,在指定的时间内(秒),图像数据是否一直不变.(卡屏).命令参数x1 :区域的左上X坐标y1 :区域的左上Y坐标x2 :区域的右下X坐标y2 :区域的右下Y坐标t :需要等待的时间,单位是秒 返 回 值0 : 没有卡屏,图像数据在变化.1 : 卡屏. 图像数据在指定的时间内一直没有变化.
IsDisplayDead函数的原理:不停的截取指定区域里的图像,然后比较,如果图像不一样了立刻返回0,否则等待直到指定的时间到达.
代码:Call 注册大漠()Set dm = createobject('dm.dmsoft') DO If dm.IsDisplayDead(37,89,663,556, 3) = 1 Then TracePrint '不走了' Else TracePrint '行走中' End IfLoop Function 注册大漠() Dim i '释放附件内容 PutAttachment 'C:\test_game', '*.*' Set ws = createobject('Wscript.Shell') For i = 0 To 20 '注册atl跟dm插件 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 <> '' Then Exit For End If Next If i >= 20 Then TracePrint '大漠插件注册失败!' EndScript End If Set dm = nothing Delay 10End Function
注意:和方法1比较,IsDisplayDead只需一行命令即可获知图片的变化情况,然而IsDisplayDead函数的等待时间,测试中发现最小值只能设置为0.6秒,如果设置为0.6以下的,函数就会失去效果如果在等待时间上希望少于0.6秒的同学,建议使用方法1