大家在用模拟器同步器启动脚本的时候, 会发现每个模拟器的随机数结果是一样的, 比如5个模拟器随机结果顺序都是5, 2, 3, 2之类的.
这是因为按键精灵的Randomize() 命令默认值为当前系统秒数, 也就是在同一秒内不管启动运行多少次, 结果是完全一样的.
这里提供3种解决方法.
第一种, 使用紫猫插件的随机数功能, 紫猫插件的初始化随机数种子默认值是毫秒级的时间, 能解决大部分同步器的问题, 如果本方法无效, 请看第二个方法
- Import "zm.luae" //导入插件,只需执行一次
- zm.Init //初始化插件, 内含执行zm.RndInitSeed()初始化随机种子功能, 所以不需要初始化随机种子了
- //这里注意, 千万不要加自带的Randomize()命令!!!!
- //直接用紫猫插件里的随机功能, 不管是随机数字还是随机姓名都可以
- TracePrint zm.RndNum(100, 10) //随机10到100
复制代码第二种, 如果上面这种方法失败了, 那说明你电脑太优秀了, 所有脚本是在1毫秒内启动的, 那这种情况只能人为的改变初始种子了, 也就是每一个脚本给不同的初始随机数种子, 具体例子见下面代码, 如果你会写界面的话, 可以把初始化种子的10,20,30这部分加法数字放到界面配置上, 其他数字也可以, 反正保证每个模拟器的初始化种子值不一样就行, 这种是最推荐的方法.
- //第1个模拟器脚本
- Import "zm.luae" //导入插件,只需执行一次
- zm.Init //初始化插件
- zm.RndInitSeed Time() + 10 //初始化第1个模拟器的随机种子, 只要执行一次就够了, 千万不要循环执行多次!
- //这里注意, 千万不要加自带的Randomize()命令!!!!
- //直接用紫猫插件里的随机功能, 不管是随机数字还是随机姓名都可以
- TracePrint zm.RndNum(100, 10) //随机10到100
复制代码- //第2个模拟器脚本
- Import "zm.luae" //导入插件,只需执行一次
- zm.Init //初始化插件
- zm.RndInitSeed Time() + 20 //初始化第2个模拟器的随机种子, 只要执行一次就够了, 千万不要循环执行多次!
- //这里注意, 千万不要加自带的Randomize()命令!!!!
- //直接用紫猫插件里的随机功能, 不管是随机数字还是随机姓名都可以
- TracePrint zm.RndNum(100, 10) //随机10到100
复制代码- //第3个模拟器脚本
- Import "zm.luae" //导入插件,只需执行一次
- zm.Init //初始化插件
- zm.RndInitSeed Time() + 30 //初始化第3个模拟器的随机种子, 只要执行一次就够了, 千万不要循环执行多次!
- //这里注意, 千万不要加自带的Randomize()命令!!!!
- //直接用紫猫插件里的随机功能, 不管是随机数字还是随机姓名都可以
- TracePrint zm.RndNum(100, 10) //随机10到100
复制代码如果你不想每个脚本单独配置, 第一种方法又无效, 那这里再提供一种不太靠谱的方法三.
依靠网络数据提供初始种子, 但是缺点是, 无法保证该网站每次都能成功返回数值, 毕竟是国外的站点.
补充提醒下, 该网站获取随机次数有限额, 大约一天1000次吧? 具体忘了, 所以该方法不是很稳定, 但是可以提供思路, 你们也可以自己找找有没有其他类似的网站
- Import "zm.luae" //导入插件,只需执行一次
- zm.Init //初始化插件
- //获取网络数据初始化随机种子值, 警告, 有时候会出现获取失败导致结果异常!
- //只要执行一次zm.RndInitSeed()就够了, 千万不要循环执行多次!
- zm.RndInitSeed CLng(Url.Get("https://www.random.org/integers/?num=1&min=1&max=99999999&col=1&base=10&format=plain&rnd=new"))
- //这里注意, 千万不要加自带的Randomize()命令!!!!
- //直接用紫猫插件里的随机功能, 不管是随机数字还是随机姓名都可以
- TracePrint zm.RndNum(100, 10) //随机10到100
复制代码