- 按键认证大神
- 728264
- 3501
- 18
- 1898 朵
- 27453 个
- 1717 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-04-25 01:33
|
|只看楼主
今天我们讲的是如何判断人物是不是在执行移动动作,而不是指人物坐标是否变化。那么两者有什么区别呢?因为大多数游戏中,通过键鼠操作对人物进行移动的时候,人物在操作键鼠后或行走途中,实际显示的坐标已经变化了。如果单纯通过坐标对比来判断人物是否正在移动,是不准确的。为什么要判断人物是否正在移动呢?因为有的时候我们查找游戏中地面上的图片或文字,相同的人物坐标,人物移动和静止两种状态下,同样的查找范围,图像是不一样的。我们今天解决这个问题的目的,就是为了提高查找的准确率。思路:对游戏画面中,人物移动时会变化的坐标点的颜色进行获取,多个点、多次对比颜色一致则判定为人物静止,反之则正在移动。注意:不要取人物不动,游戏画面中也会动的颜色的坐标作为判定坐标。图像演示:注意:上图中人物坐标相同,查找图片的范围相同,但移动与静止的不同情况下画面是不一致的。函数名: 判断人物是否正在移动 参数定义: 坐标 字符串型:要获取的颜色的坐标点,多个坐标用|进行连接,比如"0,0|1023,0|0,767|1023,767" 匹配颜色数量 整数型:当前画面对比第一次的画面共同坐标点颜色为一致的最小数量 匹配图片数量 整数型:连续多少次匹配颜色数量达到要求,算作人物静止 返回值: 整数型:人物正在移动返回1,否则返回0。
- Function 判断人物是否正在移动(坐标, 匹配颜色数量, 匹配图片数量)
- Dim 取色坐标数组, U_取色坐标数组, i, k, 当前匹配颜色数量, xy
- 取色坐标数组 = Split(坐标, "|")
- U_取色坐标数组 = UBound(取色坐标数组)
- If 匹配颜色数量 > (U_取色坐标数组 + 1) Then
- 匹配颜色数量 = U_取色坐标数组 + 1
- End If
- 当前匹配颜色数量 = 0
- Redim 颜色数组(匹配图片数量), 当前颜色(U_取色坐标数组)
- 当前匹配图片数量 = 0
- For k = 0 To 匹配图片数量
- For i = 0 To U_取色坐标数组
- xy = Split(取色坐标数组(i), ",")
- 当前颜色(i) = Plugin.Color.GetPixelColor(CLng(xy(0)), CLng(xy(1)), 0)
- Next
- 颜色数组(k) = 当前颜色
- Next
- For k = 1 To 匹配图片数量
- 当前匹配颜色数量 = 0
- For i = 0 To U_取色坐标数组
- If 颜色数组(0)(i) = 颜色数组(k)(i) Then
- 当前匹配颜色数量 = 当前匹配颜色数量 + 1
- If 当前匹配颜色数量 >= 匹配颜色数量 Then
- 当前匹配图片数量 = 当前匹配图片数量 + 1
- Exit For
- End If
- End If
- Next
- If (匹配图片数量 - k + 当前匹配图片数量) < 匹配图片数量 Then
- Exit For
- End If
- Next
- If 当前匹配图片数量 >= 匹配图片数量 Then
- 判断人物是否正在移动 = 0
- Else
- 判断人物是否正在移动 = 1
- End If
- End Function
复制代码 调用例子:- TracePrint 判断人物是否正在移动("0,0|1023,0|0,767|1023,767", 2, 10)
复制代码
|