Project1

标题: 求教一个类似开彩票的问题 [打印本页]

作者: 踢腿水上飘    时间: 2020-6-8 23:39
标题: 求教一个类似开彩票的问题
就是一种物品,使用可以触发公共事件,随机得到一个变量1-5,分别对应得到不同的物品
我又设计了使用之后消耗掉所有的该物品数量,一次开掉所有的彩票,然后在事件里循环上面那个公共事件,直到物品用完
但是这就会出现一个问题,就是彩票数量比较多,比如99个的时候,运行上面这个事件就会卡几秒钟不能动
有没有比较快速高效的方法使得一次开掉上百张彩票也不会卡?
作者: guoxiaomi    时间: 2020-6-8 23:53
99个能卡几秒钟吗,会不会因为你有别的脚本,比如提示获得了xx物品,这样就会尝试渲染一段文字?
作者: chanszeman1018    时间: 2020-6-9 00:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: ppspssss    时间: 2020-6-9 14:33
#我想到的, 优化必用的變量計时器延时法 , 延时开啟 ,  雖然延时了,但至少不会卡住
腳本 : $變量計时器 = 0
循環


条件分歧 腳本 : $變量計时器 < 3 #延时數值 我的遊戏設定40幀所大慨為 40計數 = 1秒,
腳本 : $變量計时器 += 1

否則   
运行 消耗掉所有的该物品数量的公共事件  #夠設定的數值就 运行公共事件
腳本 : $變量計时器 == 0# 重置計时器
結束条件分歧



条件分歧  開关 [直到物品用完] ==ON  #这个开关你自己做完所有事件自己設定
跳出循環
結束条件分歧

以上反复
作者: 踢腿水上飘    时间: 2020-6-10 19:47
guoxiaomi 发表于 2020-6-8 23:53
99个能卡几秒钟吗,会不会因为你有别的脚本,比如提示获得了xx物品,这样就会尝试渲染一段文字? ...

没有啊 ,我甚至没有用获得物品
我设计的是
用一个变量1记录彩票数量
然后减少彩票,数量为变量1
然后循环
变量2赋值随机1-5
如果结果1,变量3+1
如果是2,变量4+1
...
然后变量1 -1
当变量1=0的时候跳出循环。
然后获得物品A,数量为变量3
获得物品B,数量为变量4
......
当有99个彩票的时候,一次开完,要卡个1,2秒动不了吧
作者: guoxiaomi    时间: 2020-6-10 21:54
本帖最后由 guoxiaomi 于 2020-6-10 22:11 编辑

OK我服了,还真的要花1秒多的时间开99个彩票……

总之解决方案就是不创建子公共事件而是写到一个事件里: Data.zip (193.7 KB, 下载次数: 46)

为了一屏能截下我去掉了几个分支,看上去这里改成增加物品的事件也可以?


根本原因在Game_Interpreter的第106行:
  1.   #--------------------------------------------------------------------------
  2.   # * Execute
  3.   #--------------------------------------------------------------------------
  4.   def run
  5.     wait_for_message
  6.     while @list[@index] do
  7.       execute_command
  8.       @index += 1
  9.     end
  10.     Fiber.yield
  11.     @fiber = nil
  12.   end
复制代码

注释掉Fiber.yield就可以光速开箱了,这里相当于是在每次执行公共事件之后等待1帧……99个公共事件就是1.67s正好,注释掉之后花的时间才0.002s
或者改成Fiber.yield if @depth > 0,这样就可以只对被调用的公共事件生效,或者你加个别的开关也行




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1