分享一个有用的函数封装

[复制链接]
查看21659 | 回复33 | 2021-8-18 11:04:38 | 显示全部楼层 |阅读模式
本帖最后由 qiaohw04 于 2021-8-18 11:08 编辑

写脚本(特别游戏脚本)时, 经常遇到类似的情况: 点击了背包按钮, 如果接着就判断背包是否打开,往往识别不到, 这是因为点击后,背包不是立刻打开, 中间会经历几十或者上百毫秒, 因为时间短,所以我们主观上感觉是立刻打开的.
因此, 我们应该在点击背包按钮后, 在一段时间内循环判断背包界面的颜色特征是否出现. 以下代码可以作为参考, 为新手提供思路
  1. function utils.waitExp(func,expireTime)
  2.         if not expireTime then expireTime=0 end
  3.         local sTime = systemTime()
  4.         while (true) do
  5.                 local ret= func[1](func[2])
  6.                 if ret then
  7.                         return ret
  8.                 end
  9.                 if(systemTime() - sTime >= expireTime) then
  10.                         return false
  11.                 end
  12.                 sleep(100)
  13.         end
  14. end
复制代码

参数func是一个table类型, func[1]是函数, func[2]是传入函数的参数, 注意此方法只适用于func[1]只有一个参数的情况. 参数expireTime是超时时间,单位毫秒
调用方法如下:
-- 点击背包按钮后
local 背包界面色征 = {......}
local ret = utils.waitExp({findMultiColorAllT, 背包界面色征}, 3000)
由此, 就可以实现在点击了背包按钮后, 接下来检测背包界面特征, 如果检测到背包界面,返回找色的结果(坐标), 如果3秒内没有检测到背包界面, 返回false



回复

使用道具 举报

龙睛鱼 | 2021-8-19 08:42:27 | 显示全部楼层
回复

使用道具 举报

fojiao1992 | 2021-8-19 15:41:53 | 显示全部楼层
可以用for循环吗
回复

使用道具 举报

lr666 | 2021-8-19 19:18:27 | 显示全部楼层
谢谢大佬分享
回复

使用道具 举报

时之刃 | 2021-8-19 22:09:00 | 显示全部楼层
学习学习
回复

使用道具 举报

tenctry | 2021-8-20 08:56:17 | 显示全部楼层
学习学习学习
回复

使用道具 举报

cyx2004 | 2021-8-20 12:17:05 | 显示全部楼层
可以封装一个等待特征出现和等待消失
回复

使用道具 举报

xywl | 2021-8-20 13:10:51 | 显示全部楼层
收藏了
回复

使用道具 举报

qiaohw04 | 2021-8-25 12:05:17 | 显示全部楼层

也可以啊, 不过for是要有循环变量的, 用起来没有while舒服
回复

使用道具 举报

qiaohw04 | 2021-8-25 12:06:03 | 显示全部楼层
总体的思路就是循环等待特征出现, 至于怎么实现个人习惯吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

4

主题

17

帖子

105

积分

注册会员

Rank: 2

积分
105