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

软件版本: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

快捷导航

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

发新话题 回复该主题

[技术交流] 【院刊】-【201503期】寻路中判断人物是否停止行走 [复制链接]

1#

寻路中判断人物是否停止行走

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









按键学院交流群(1群已满):376122403


零基础学按键精灵群(2群):372671254






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

   







方法1



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



代码:
  1. Do
  2. TracePrint 判断人物行进状态()
  3. Loop
  4. Function 判断人物行进状态()
  5. Dim i, j,ColorA1,ColorB1, ColorC1, ColorD1,ColorA2, ColorB2, ColorC2, ColorD2
  6. For i = 0 To 1
  7. j = 0
  8. ColorA1 = ColorA2
  9. ColorB1 = ColorB2
  10. ColorC1 = ColorC2
  11. ColorD1 = ColorD2
  12. ColorA2 = Plugin.Color.GetPixelColor(198, 63,0)
  13. ColorB2 = Plugin.Color.GetPixelColor(375,155,0)
  14. ColorC2 = Plugin.Color.GetPixelColor(204,360,0)
  15. ColorD2 = Plugin.Color.GetPixelColor(508,525,0)
  16. If ColorA1 = ColorA2 Then
  17. j = j + 1
  18. End If
  19. If ColorB1 = ColorB2 Then
  20. j = j + 1
  21. End If
  22. If ColorC1 = ColorC2 Then
  23. j = j + 1
  24. End If
  25. If ColorD1 = ColorD2 Then
  26. j = j + 1
  27. End If
  28. If j >= 2 Then
  29. 判断人物行进状态 = 0 //停止行走
  30. Exit Function
  31. End If
  32. Next
  33. 判断人物行进状态 = 1 //行走中
  34. End Function
复制代码
注意:
例子中,小编获取了四个颜色点进行判断,
不是说要固定四个点,你想五个也可以六个也可以
不过不建议点的数量过少,例如2个点,如果这两个点刚好都没有变化呢?就会造成错误的判断





方法2


使用大漠插件的IsDisplayDead函数来判断区域里的图像是不是在变化
上一期院刊中,我们就是这个函数来判断人物的行走状态的


命令名称IsDisplayDead
命令功能判断指定的区域,在指定的时间内(秒),图像数据是否一直不变.(卡屏).

命令参数x1 :区域的左上X坐标
y1 :区域的左上Y坐标
x2 :区域的右下X坐标
y2 :区域的右下Y坐标

t :需要等待的时间,单位是秒
返 回 值0 : 没有卡屏,图像数据在变化.
1 : 卡屏. 图像数据在指定的时间内一直没有变化.



IsDisplayDead函数的原理:不停的截取指定区域里的图像,然后比较,如果图像不一样了立刻返回0,否则等待直到指定的时间到达.
代码:
  1. Call 注册大漠()
  2. Set dm = createobject("dm.dmsoft")

  3. DO
  4. If dm.IsDisplayDead(37,89,663,556, 3) = 1 Then
  5. TracePrint "不走了"
  6. Else
  7. TracePrint "行走中"
  8. End If
  9. Loop

  10. Function 注册大漠()
  11. Dim i
  12. '释放附件内容
  13. PutAttachment "C:\test_game", "*.*"
  14. Set ws = createobject("Wscript.Shell")
  15. For i = 0 To 20
  16. '注册atl跟dm插件
  17. ws.run("regsvr32 atl.dll -s")
  18. ws.run ("regsvr32 C:\test_game\dm.dll -s")
  19. Delay 200
  20. Set ws = nothing
  21. Set dm = createobject("dm.dmsoft")
  22. ver = dm.ver()
  23. '输出版本号
  24. If ver <> "" Then
  25. Exit For
  26. End If
  27. Next
  28. If i >= 20 Then
  29. TracePrint "大漠插件注册失败!"
  30. EndScript
  31. End If
  32. Set dm = nothing
  33. Delay 10
  34. End Function
复制代码
注意:

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



小编十分喜欢IsDisplayDead函数
不仅可以判断人物的行走状态
还可以用于判断游戏卡屏是否
说到卡屏除了IsDisplayDead函数能判断卡屏之外,还有其他的方法
详情请参阅相关院刊:

【院刊】-【201408期】如何知道窗口是否无响应或卡屏呢?




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

零基础学按键精灵2015年开始招生!

全面系统回合制脚本教学



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

    本主题由 超级版主 瑞祥幽冥狼 于 2023/4/14 22:02:31 执行 审核帖子 操作
    按键学院免费交流群:376122403

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

    学习,天天都要学习!

    3#


    4#

    谢谢啦,终于找到了

    5#


    6#

    看看学习学习来了

    7#

    支持支持

    8#

    顶顶顶顶顶顶顶顶顶

    9#


    10#

    dhjjdjsj

    11#

    111111111111111111111111111111111

    12#

    胡建华ijh

    13#


    好好学习,天天向上!
    14#

    44111555

    15#

    谢谢分享了。。。

    16#


    17#

    感谢分享。。。

    18#

    vbgfjhkkjjhhvfgfggdfggf

    19#

    kaknkg 就恢复规划

    20#

    学习

    发新话题 回复该主题