游戏吸引人的地方在于他的不愿定性,有可能赶路的时候顺手干掉一个野怪,居然爆出了屠龙宝刀(→_→),但是脚本不同,我们希望的是:他能完备按照我们的逻辑进行,就算偏离了后也能自动扭正回来,连续当前的逻辑。
脚本的稳定性是所有作者最关心的问题,可能你的脚本能运行1个小时,2个小时,但是由于各种成分,乃至有的并不是由于你脚本的问题而产生的逻辑进行不下去的情形,最范例的例子便是网络延时的弹窗,当然这个要处理很大略,由于他属于可预测的问题(游戏本身的),只须要在每一个含有联网操作的地方都加上剖断即可(写一个函数大家一起用)。但是有一类是无法预测的,比如有的游戏会有全服公告的喇叭,时时时就涌现一次,纵然他只涌现一会也会影响我们的剖断,一个剖断的缺点会导致持续串的缺点,导致游戏实际状态和我们逻辑处理到的地方不一致,然后。。。就没有然后了,等着用户创造并吐槽你吧。
对付这类型的问题:先来剖析一下第一种处理方法----在所有的操作循环中加入剖断,看看代码:
Dim 计数器 = 0DoIf CmpColorEx(\"大众当前界面特色\公众,0.9)=1 ThenTap 相应功能的位置End IfDelay 100If CmpColorEx(\"大众操作之后的界面特色\公众,0.9)=1 ThenExit DoEnd IfIf 计数器 > 50 ThenTracePrint \"大众超时了\"大众Call 超时处理()Else计数器= 计数器+1End IfLoop复制代码
代码的功能很大略,便是一次操作利用的循环,先探求当前界面你须要点击的位置(找色比色找图都行),点击之后探求这次操作产生的相应,比如涌现弹窗什么的,然后开始探求此弹窗特点,探求到就解释这次操作成功,可以退出此循环,这便是这段代码的功能,而后面的计数器则是为了防止有一些分外情形,产生两个特色图都找不到,脚本卡去世在这个循环里,超时之后我们可以在超时处理函数里做重启游戏之类的操作。
剖析完了功能之后,我们再来剖析一下优缺陷,优点显而易见,基本能处理所有我们预测不到的问题,并且超时时间可以调度,添加的位置很自由,超时的处理办法也可以自己设置。缺陷便是事情量大,一个脚本可能含有大量的循环,他们或多或少有点差异,这段代码没法复用。
好了,我们再来看看第二种处理办法----多线程检测,直接看代码:
Thread.SetShareVar(\公众进度值\公众,0)Dim 超时 = 8 //秒Dim 主逻辑线程Function 主逻辑函数()DoDim 任务韶光 = Cint(Rnd()5)+5Delay 任务韶光 1000Thread.SetShareVar \"大众进度值\"大众, Thread.GetShareVar(\"大众进度值\"大众) + 1TracePrint \"大众这次任务完成,利用了\"大众&任务韶光&\"大众秒,当提高度为:\"大众&Thread.GetShareVar(\"大众进度值\"大众)&\公众,重新计数\公众LoopEnd FunctionFunction 超时处理()TracePrint \"大众这次任务耗时超过\"大众&超时&\公众秒,等待5秒后重新启动,连续上次的进度\"大众Thread.Stop (主逻辑线程)Delay 5000主逻辑线程 = Thread.Start(主逻辑函数)End FunctionFunction 判断超时函数()Dim 剖断计数 = 0DoDim 初始进度 = Thread.GetShareVar(\"大众进度值\"大众)Delay 1000If 初始进度 = Thread.GetShareVar(\"大众进度值\公众) Then剖断计数 = 剖断计数 + 1TracePrint \"大众超时计数器:\公众&剖断计数Else剖断计数 = 0End IfIf 剖断计数 >= 8 Then超时处理()剖断计数 = 0End IfLoopEnd Function主逻辑线程 = Thread.Start(主逻辑函数)Call 判断超时函数()复制代码
利用多线程来做定时,我们须要对任务韶光做剖析来设定超时时间,上面的代码中,设置每个任务的韶光利用一个随机延时5-10秒,在多线程检测中,如果一个任务处理超过8秒,我们就认定这个任务超过了估量的韶光,有可能发生问题了(卡在某个地方之类的),那么我们直接做超时处理。我们来看看处理的结果:
连续谈论优缺陷,优点是处理大略,通过一个共享变量在游戏线程中变动,而超时判断线程中检测此变动来剖断是否卡住,只算单个任务或者全部任务的总耗时,偏差小(一个任务如果偏差1-10秒,当有10种任务时,我们用第一种办法可能会许可100秒的超时,但是实际上均匀韶光只有50秒,我们打算总耗时可以设定70秒,偏差相对较小,在任务越多,耗时差距越大时候越明显),缺陷便是可控性差,乃至无法针对一个任务中的一部分操作做超时检测。
两种方法各有优缺陷,用哪种全看你自己的需求和习气,实在不好决定的话。。。。。两种一起用吧!
不信你的脚本还不稳定!