- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2015-03-13 15:04
|
|只看楼主
寻路中判断人物是否停止行走
本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403 零基础学按键精灵群(2群):372671254
在人物行走过程中,我们判断游戏画面有没有变化 如果变化了说明人物还在行走过程中,如果没有变化则说明人物已经停止走动 今天分享下两种判断游戏图片有没有变化的方法
|
|
方法1
1、我们观察下游戏里,人物在行走的时候会变化,停止的时候不会变化的区域是哪里。 2、获取这块区域里的任意几个颜色点 3、判断第一次获取和第二次获取到的点的颜色值是不是一样的: 如果你要判断区域里的四个点有没有变化,那么先定义八个变量 前四个变量用于记录第一次读取到的四个点的颜色值 后四个变量用于记录第二次读取到的四个点的颜色值 然后将两次获取到的值进行对比,对比结果一样则说明人物未移动 代码:- Do
- TracePrint 判断人物行进状态()
- Loop
- Function 判断人物行进状态()
- 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 If
- Loop
- 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 10
- End Function
复制代码 注意:和方法1比较,IsDisplayDead只需一行命令即可获知图片的变化情况, 然而IsDisplayDead函数的等待时间,测试中发现最小值只能设置为0.6秒,如果设置为0.6以下的,函数就会失去效果 如果在等待时间上希望少于0.6秒的同学,建议使用方法1 小编十分喜欢IsDisplayDead函数 不仅可以判断人物的行走状态 还可以用于判断游戏卡屏是否 说到卡屏除了IsDisplayDead函数能判断卡屏之外,还有其他的方法 详情请参阅相关院刊:【院刊】-【201408期】如何知道窗口是否无响应或卡屏呢?本文由按键学院提供技术支持 零基础学按键精灵2015年开始招生! 全面系统回合制脚本教学
|