- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2014-11-21 14:49
|
|只看楼主
不再为脚本卡死而忧伤。
﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋
﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊﹋﹊
本文由按键学院提供技术支 ▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂
|
盆友写了个押镖脚本,刚开顺顺当当的,运行一会儿后没了反应,不操作也不停止脚本。 “为什么突然不灵了呢?” 小编最喜欢灵异事件,于是火急火燎的去看。
|
|
▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂▂﹏▂﹏▂﹏▂﹏▂﹏▂﹏▂ |
- 您所在的用户组无法下载或查看附件
盆友玩的是: XXXX某游戏 押镖规则: 1、可以选择坐在镖车上、步行、或者骑马。 2、步行或者骑马,人物在前面走,镖车会跟随人物。 3、如果人物与镖车距离过远了,镖车则停止跟随,停留在原地。
|
● 如果人物坐在镖车上,镖车行走的速度比蜗牛还慢,所以盆友选择了骑马的方式。
● 骑马的速度是快过镖车的,很容易造成镖车和人物距离远,镖车不跟随的情况。所以盆友这样写:骑马骑一段时间,停下来等待,循环找图,找到镖车图标之后,继续前进。
● 兴许是马儿跑得欢了,等停下来等待的时候,与镖车的距离早已超过了镖车会自动跟随的距离。
● 找不到镖车的图,就一直循环一直循环~看上去就像脚本卡住了一样
|
由此可见,死循环完全可以终结一个脚本。 死循环的例子还有其它
例如:
在游戏里点击npc交任务的时候,正常的流程是这样的: 1、循环找交任务按钮,找到交任务的按钮则点击,找不到则继续找, 2、循环找 接新任务的按钮,找到则点击,找不到则继续找。
但是会出现这样的情况,有的任务提交限等级,没有30级不能提交。 这个时候 我们点击完交任务的按钮,npc对话框上会提示没满等级任务不能交,但是npc交任务的对话框依然还在。 接新任务的按钮被对话框遮挡,无法找到,则进入死循环。
|
|
方法1:既然循环会死- -,那就干脆不用循环。//以点击npc弹出对话框点击对话框里的接新任务为例。 |
1、点击npc对话 2、算准点击npc之后,对话框延时多长时间弹出来。 3、用延时命令,延时之后再进行找图。- LeftClick 1//点击npc
- Delay 3000 //延时三秒等待npc对话框出现
- FindPic 0,0,1024,768,"c:\接新任务按钮.bmp",0.9,intX,intY
- 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
- FindPic 0,0,1024,768,"c:\接新任务按钮.bmp",0.9,intX,intY
- 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
- FindPic 0,0,1024,768,"c:\接新任务按钮.bmp",0.9,intX,intY
- 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
- FindPic 0,0,1024,768,"c:\接新任务按钮.bmp",0.9,intX,intY
- 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
- FindPic 0,0,1024,768,"c:\接新任务按钮.bmp",0.9,intX,intY
- If intX>0 and intY>0 Then
- // 执行操作
- Exit For
- End If
- Delay 1000
- Next
复制代码 评分:★★★ 评语: 百分百解决死循环问题,并且相较于循环加计数的,多加了一个计时,我们以时间去限制循环,而不单单是次数。 例如:我们希望这个循环,1分钟内执行不了则退出循环。我们可以设置循环60次,每次循环延时1秒钟,或者循环10次,每次循环延时6秒。
|
押镖:第一个押镖的例子中,我们加入计数计时判断,判断次数达到限制次数之后,我们要怎么处理呢?肯定不是直接结束循环什么也不干。
后续处理:如果限定循环次数内未找到镖车的图标。则人物往回移动一点,继续找镖车图标。 限定往回走的次数,达到次数之后,弹出提示脚本遇到错误的信息或者停止脚本。
Npc对话框接新任务:
后续处理:如果限定循环次数内未找到接新任务按钮的图标。则判断当前窗口内是否有交任务的按钮,有则说明是任务没有交成功,点击关闭npc对话框。
| 童鞋们如果有其它对于死循环的看法,或者好的处理方法,欢迎分享讨论~~
本文由按键学院提供技术支持 ━═━═━━═━═━━═━═━◥◤━═━═━━═━═━━═━═━ 按键学院开班【手机按键】 重金招募导师! 按键学院实战班
|