Local $aNum =
Local $i, $vC, $iMix, $vNeed
For $i = 0 To UBound($aNum) - 1
$vC = $aNum[$i] - $vCZ
If $vC > 0 And (Not $iMix Or $vC < $iMix) Then Dim $vNeed = $aNum[$i], $iMix = $vC
Next
MsgBox(0, '最接近' & $vCZ, $vNeed) 本帖最后由 dearmb 于 2014-3-10 15:23 编辑
afan 发表于 2014-3-10 14:53 http://www.autoitx.com/images/common/back.gif
A版能否解释一下这句话
If $vC > 0 And (Not $iMix Or $vC < $iMix) Then Dim $vNeed = $aNum[$i], $iMix = $vC
$iMix = $vC
Not $iMix Or $vC < $iMix
这句没看明白
看好几遍也没看明白……
因为还有下面的这样的情况
Local $vCZ = 55
Local $aNum =
我看不明白你的代码,所以不知道全部小于想搜索数的情况怎么判断
如果没空给我解释……我只能If $vNeed="" Then ……
555555,看不懂代码啊,5555555 回复 18# dearmb
你这不是已经看懂了吗?其实很简单的逻辑,解释又费劲…
If Not $vNeed Then ... 比较恰当点 本帖最后由 dearmb 于 2014-3-10 16:05 编辑
回复 19# afan
根本没看懂……
我是特意都改成55以下的数,试了一下输出的“”,所以才If $vNeed="" Then ……的
实际上语句根本没看懂为啥能得到我想要的结果
主要是我改你的代码放到我的程序里,有错误,不知道怎么修改 本帖最后由 dearmb 于 2014-3-10 16:22 编辑
#AutoIt3Wrapper_UseX64=n
#Include <ScreenCapture.au3>
#include <array.au3>
#Include <File.au3>
#Include <Date.au3>
;Opt("MouseCoordMode", 0)
Global $x1,$x2,$y1,$y2,$flag=0,$flag1=0,$flag2=0,$flag3=0,$k,$a=1,$arrhenggang,$aaa,$i, $vC, $iMix, $vNeed
$dm = ObjCreate("dm.dmsoft")
WinActivate("BlueStacks")
Sleep(1000)
$size = WinGetPos("BlueStacks")
$x1=$size
$y1=$size
$x2=$size+$size
$y2=$size+$size
$liangdian = $dm.FindPicEx($x1,$y1,$x2,$y2,@ScriptDir & '\Image\liangdian.bmp',"000000",0.9,2)
$ssliangdian=StringSplit($liangdian,"|")
$countliangdian=$ssliangdian;两点的个数
For $i = $countliangdian to 1 Step -1;
ReDim $arrhenggang
$henggang = $dm.FindPicEx($x1,$y1,$x2,$y2,@ScriptDir & '\Image\henggang.bmp',"000000",0.9,2)
$sshenggang=StringSplit($henggang,"|")
$counthenggang=$sshenggang
For $k=1 To $counthenggang
$ssshenggang=StringSplit($sshenggang[$k],",")
_ArrayAdd($arrhenggang, $ssshenggang)
Next
$liangdian = $dm.FindPicEx($x1,$y1,$x2,$y2,@ScriptDir & '\Image\liangdian.bmp',"000000",0.9,2)
$ssliangdian=StringSplit($liangdian,"|")
$sssliangdian=StringSplit($ssliangdian[$i],",")
$vCZ=$sssliangdian
_ArrayDisplay($arrhenggang, "原数组")
;MsgBox(0,0,$vCZ)
For $j = 0 To UBound($arrhenggang) - 1
; MsgBox(0,0, $arrhenggang[$j])
$vC = $arrhenggang[$j] - $vCZ
; MsgBox(0,0,$vC)
If $vC > 0 And (Not $iMix Or $vC < $iMix) Then
Dim $vNeed = $arrhenggang[$j], $iMix = $vC
EndIf
Next
MsgBox(0, '最接近' & $vCZ, $vNeed)
If $vNeed="" Then MsgBox(0,0,0)
Next
下一楼是图片
用四个数分别做对比,744,581,427,178(就是点赞那两个点的Y坐标)
对比的数组是三个数,201,450,637就是找到了条横杠的Y坐标
最后的178,找到最近的数应该是201,但是返回的是450
不知道为什么 本帖最后由 dearmb 于 2014-4-5 08:53 编辑
------------------------------------------ 写成函数直接调用Local $vCZ = 55
Local $aNum =
Local $rt = _GetApproachesNum($vCZ, $aNum)
MsgBox(0, @error, $rt)
Func _GetApproachesNum($vCZ, $aNum)
If Not IsArray($aNum) Or UBound($aNum, 0) > 1 Then Return SetError(1, 0, 0)
Local $i, $vC, $iMix, $vNeed
For $i = 0 To UBound($aNum) - 1
$vC = $aNum[$i] - $vCZ
If $vC > 0 And (Not $iMix Or $vC < $iMix) Then Dim $vNeed = $aNum[$i], $iMix = $vC
Next
If Not $vNeed Then Return SetError(2, 0, 0)
Return $vNeed
EndFunc ;==>_GetApproachesNum 回复 17# afan
注意,他的要求里$aNum是不定数量的。 回复afan
注意,他的要求里$aNum是不定数量的。
skyfree 发表于 2014-3-10 22:03 http://autoitx.com/images/common/back.gif
是不定数量的,我自己建数组往里填写了,我还是会改一改的
页:
1
[2]