多语言展示
当前在线:1978今日阅读:59今日分享:29

游戏脚本技术:按键精灵判断人物行走状态

在人物行走过程中,我们判断游戏画面有没有变化如果变化了说明人物还在行走过程中,如果没有变化则说明人物已经停止走动今天分享下两种判断游戏图片有没有变化的方法
工具/原料

按键精灵2014

方法/步骤
1

方法11、我们观察下游戏里,人物在行走的时候会变化,停止的时候不会变化的区域是哪里。2、获取这块区域里的任意几个颜色点3、判断第一次获取和第二次获取到的点的颜色值是不是一样的:           如果你要判断区域里的四个点有没有变化,那么先定义八个变量           前四个变量用于记录第一次读取到的四个点的颜色值           后四个变量用于记录第二次读取到的四个点的颜色值           然后将两次获取到的值进行对比,对比结果一样则说明人物未移动

2

代码: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

3

注意:    例子中,小编获取了四个颜色点进行判断,        不是说要固定四个点,你想五个也可以六个也可以        不过不建议点的数量过少,例如2个点,如果这两个点刚好都没有变化呢?就会造成错误的判断

4

方法2使用大漠插件的IsDisplayDead函数来判断区域里的图像是不是在变化上一期院刊中,我们就是这个函数来判断人物的行走状态的命令名称IsDisplayDead命令功能判断指定的区域,在指定的时间内(秒),图像数据是否一直不变.(卡屏).命令参数x1 :区域的左上X坐标y1 :区域的左上Y坐标x2 :区域的右下X坐标y2 :区域的右下Y坐标t  :需要等待的时间,单位是秒 返 回 值0 : 没有卡屏,图像数据在变化.1 : 卡屏. 图像数据在指定的时间内一直没有变化.

5

IsDisplayDead函数的原理:不停的截取指定区域里的图像,然后比较,如果图像不一样了立刻返回0,否则等待直到指定的时间到达.

6

代码: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

7

注意:和方法1比较,IsDisplayDead只需一行命令即可获知图片的变化情况,然而IsDisplayDead函数的等待时间,测试中发现最小值只能设置为0.6秒,如果设置为0.6以下的,函数就会失去效果如果在等待时间上希望少于0.6秒的同学,建议使用方法1

推荐信息