设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2605|回复: 11
打印 上一主题 下一主题

[已经解决] 求教一个类似开彩票的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1971
在线时间
926 小时
注册时间
2015-10-26
帖子
356

开拓者

跳转到指定楼层
1
发表于 2020-6-8 23:39:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
就是一种物品,使用可以触发公共事件,随机得到一个变量1-5,分别对应得到不同的物品
我又设计了使用之后消耗掉所有的该物品数量,一次开掉所有的彩票,然后在事件里循环上面那个公共事件,直到物品用完
但是这就会出现一个问题,就是彩票数量比较多,比如99个的时候,运行上面这个事件就会卡几秒钟不能动
有没有比较快速高效的方法使得一次开掉上百张彩票也不会卡?

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2020-6-8 23:53:01 | 只看该作者
99个能卡几秒钟吗,会不会因为你有别的脚本,比如提示获得了xx物品,这样就会尝试渲染一段文字?
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv4.逐梦者 (禁止发言)

梦石
0
星屑
5706
在线时间
922 小时
注册时间
2013-8-29
帖子
1468
3
发表于 2020-6-9 00:04:05 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14629
在线时间
2152 小时
注册时间
2016-9-20
帖子
861
4
发表于 2020-6-9 14:33:47 | 只看该作者
#我想到的, 优化必用的變量計时器延时法 , 延时开啟 ,  雖然延时了,但至少不会卡住
腳本 : $變量計时器 = 0
循環


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

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



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

以上反复
我发的贴子大多未经整理是草稿抱歉
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1971
在线时间
926 小时
注册时间
2015-10-26
帖子
356

开拓者

5
 楼主| 发表于 2020-6-10 19:47:34 | 只看该作者
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秒动不了吧

点评

我找你这个测试一下……  发表于 2020-6-10 21:38
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

6
发表于 2020-6-10 21:54:27 | 只看该作者
本帖最后由 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,这样就可以只对被调用的公共事件生效,或者你加个别的开关也行

点评

原来是这样,谢谢啦,搞定啦!  发表于 2020-6-11 07:03
mxdb我这个浓眉大眼的,也叛变va了!  发表于 2020-6-11 00:35
靠 O.O,刚刚截图没出来我还以为是XP,原来是Ace……我凭记忆猜的,不对当我没说过 XD ,不过从主页直接点标题太风险了……zzz  发表于 2020-6-10 22:31
应该是Fiber.yield的问题,ruby是主流语言,速度还不至于这么弱hhh  发表于 2020-6-10 22:19
估计是迭代增加了,需要把参数解析再把它变成执行的动作这个估计增加了不知道n倍的迭代(execute_command),用一个事件脚本来取代得话会快得不行。  发表于 2020-6-10 22:16

评分

参与人数 1+1 收起 理由
踢腿水上飘 + 1 认可答案

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 07:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表