
来源:按键学院 【按键精灵】
盆友写了个押镖脚本,刚开顺顺当当的,运行一会儿后没了反应,不操作也不停止脚本。
“为什么突然不灵了呢?”小编最喜欢灵异事件,于是火急火燎的去看。
为什么突然不灵了?
盆友玩的是: XXXX某游戏
押镖规则:
1、可以选择坐在镖车上、步行、或者骑马。
2、步行或者骑马,人物在前面走,镖车会跟随人物。
3、如果人物与镖车距离过远了,镖车则停止跟随,停留在原地。
● 如果人物坐在镖车上,镖车行走的速度比蜗牛还慢,所以盆友选择了骑马的方式。
● 骑马的速度是快过镖车的,很容易造成镖车和人物距离远,镖车不跟随的情况。所以盆友这样写:骑马骑一段时间,停下来等待,循环找图,找到镖车图标之后,继续前进。
● 兴许是马儿跑得欢了,等停下来等待的时候,与镖车的距离早已超过了镖车会自动跟随的距离。
● 找不到镖车的图,就一直循环一直循环~看上去就像脚本卡住了一样
由此可见,死循环完全可以终结一个脚本。
死循环的例子还有其它
例如:
在游戏里点击npc交任务的时候,正常的流程是这样的:
1、循环找交任务按钮,找到交任务的按钮则点击,找不到则继续找,
2、循环找 接新任务的按钮,找到则点击,找不到则继续找。
但是会出现这样的情况,有的任务提交限等级,没有30级不能提交。
这个时候 我们点击完交任务的按钮,npc对话框上会提示没满等级任务不能交,但是npc交任务的对话框依然还在。
接新任务的按钮被对话框遮挡,无法找到,则进入死循环。
怎样才能解决死循环呢?
方法1:
既然循环会死- -,那就干脆不用循环。//以点击npc弹出对话框点击对话框里的接新任务为例。
1、点击npc对话
2、算准点击npc之后,对话框延时多长时间弹出来。
3、用延时命令,延时之后再进行找图。
LeftClick 1//点击npc
Delay 3000 //延时三秒等待npc对话框出现
If intX>0 and intY>0 Then
// 执行操作
End If
评分:★
评语:要使用此法,前提是使用者的网络延迟情况要比脚本内设定的延时小。
网络太渣超过脚本设定延时则无法正常使用。
如果脚本作者考虑到网络延迟因素,尽可能加大脚本里的延时,脚本的效率就会变得很低。
方法2:
循环里加入计数,设置循环次数,1次2次10次,按照需求设置。如果次数到了,则退出循环。//以查找npc对话框中的接新任务按钮为例
1、使用变量i来记录次数。
2、找图。没找到图则i=i+1
3、当i=10,则退出循环。
Do循环例子:
Dim i
i = 0
Do
If intX>0 and intY>0 Then
// 执行操作
Exit Do
End If
i = i + 1
If i = 10 Then
Exit Do
End If
Loop
For循环例子:
For i = 1 To 10
If intX>0 and intY>0 Then
// 执行操作
Exit For
End If
Next
评分:★★
评语: 百分百解决死循环问题。
方法3:
循环里加入计数和计时,设置循环次数,每次循环延时多长时间。如果次数到了,则退出循环。
//以查找npc对话框中的接新任务按钮为例
1、使用变量i来记录次数。
2、找图。没找到图则i=i+1
3、加延时
4、当i=10,则退出循环。
Do循环例子:
Dim i
i = 0
Do
If intX>0 and intY>0 Then
// 执行操作
Exit Do
End If
i = i + 1
If i = 10 Then
Exit Do
End If
Delay 1000
Loop
For循环例子:
For i = 1 To 10
If intX>0 and intY>0 Then
// 执行操作
Exit For
End If
Delay 1000
Next
评分:★★★
评语: 百分百解决死循环问题,并且相较于循环加计数的,多加了一个计时,我们以时间去循环,而不单单是次数。
例如:我们希望这个循环,1分钟内执行不了则退出循环。我们可以设置循环60次,每次循环延时1秒钟,或者循环10次,每次循环延时6秒。
逃离死循环之后,后续该怎么处理呢?
押镖:第一个押镖的例子中,我们加入计数计时判断,判断次数达到次数之后,我们要怎么处理呢?肯定不是直接结束循环什么也不干。
后续处理:如果限定循环次数内未找到镖车的图标。则人物往回移动一点,继续找镖车图标。
限定往回走的次数,达到次数之后,弹出提示脚本遇到错误的信息或者停止脚本。
Npc对话框接新任务:
后续处理:如果限定循环次数内未找到接新任务按钮的图标。则判断当前窗口内是否有交任务的按钮,有则说明是任务没有交成功,点击关闭npc对话框。
