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

Project1

 找回密码
 注册会员
搜索

请问怎么让该方法返回false还不卡死?

查看数: 2693 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-1-1 22:23

正文摘要:

RUBY 代码复制def self.f                           if $game_variables[4]==0&nbs ...

回复

guoxiaomi 发表于 2020-1-2 02:31:28
本帖最后由 guoxiaomi 于 2020-1-2 06:46 编辑
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。

事件脚本指令的最后一行不能返回false,所以你需要在后面添加true或者注释

点评

哈哈,猫大的更厉害了,只加了一行就解决了,收藏了,非常感谢。还有我明白你的意思了,是在脚本编辑框的中不能是false返回值,我懂了。  发表于 2020-1-2 15:47
你有一些误解,事件脚本的最后一行返回false会导致事件阻塞,所以事件脚本最后一行写一句注释就行。这和函数/方法的返回值无关  发表于 2020-1-2 06:46
原理在此贴https://rpg.blue/thread-404592-1-1.html  发表于 2020-1-2 06:44
我把自己修改后的发到了五楼,暂时未发现任何BUG,有的话我会跟帖回复。  发表于 2020-1-2 03:34
但是有些方法就是需要判断返回值是true还是false啊,虽然可以用别的代替但比较麻烦。我根据2楼大神提供的方案改写后返回false也不卡了  发表于 2020-1-2 03:33

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 我很赞同

查看全部评分

寒凌天 发表于 2020-1-1 23:57:57
本帖最后由 寒凌天 于 2020-1-2 15:54 编辑

RUBY 代码复制
  1. def command_355
  2.     # script 设置第一行
  3.     script = @list[@index].parameters[0] + "\n"
  4.     # 循环
  5.     loop do
  6.       # 下一个事件指令在脚本 2 行以上的情况下
  7.       if @list[@index+1].code == 655
  8.         # 添加到 script 2 行以后
  9.         script += @list[@index+1].parameters[0] + "\n"
  10.       # 事件指令不在脚本 2 行以上的情况下
  11.       else
  12.         # 中断循环
  13.         break
  14.       end
  15.       # 推进索引
  16.       @index += 1
  17.     end
  18.     # 评价
  19.     result = eval(script)
  20.  
  21.     $arpg_actor.visible = $game_system.arpg_ing unless $arpg_actor.nil?
  22.  
  23.     # 返回值为 false 的情况下
  24.     if result == false
  25.       # 结束
  26.       @index += 1            #################唯一修改的地方,增加了这行代码
  27.       return false
  28.     end
  29.     # 继续
  30.     return true
  31.   end


感谢两位猫斑竹和二楼三位大神的技术贡献,我把代码重新修改了下,只要加了注释行代码,就不会出此BUG了。
(该BUG会在脚本编辑框内仅有一行代码,且代码返回值为false时无限死循环。经过测试,如果脚本编辑框内拥有两行以上的内容,无论最后一行返回结果是不是false都不会死循环。至于原因,猫斑竹的帖子里也给出了答案。)

评分

参与人数 1+1 收起 理由
taeckle + 1 大神威武!受教了!

查看全部评分

soulsaga 发表于 2020-1-1 23:46:49
寒凌天 发表于 2020-1-1 23:40
我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名) ...

这样啊..应该可以吧?

点评

我已经试过了,可以!并且把修改的结果写在了5楼。主要重写一遍加深印象。  发表于 2020-1-2 00:16
寒凌天 发表于 2020-1-1 23:40:31
本帖最后由 寒凌天 于 2020-1-1 23:43 编辑
soulsaga 发表于 2020-1-1 22:48
#--------------------------------------------------------------------------
  # ● スクリプト
  # イ ...


我这个是写在脚本编辑器里的,然后在公共事件里,用脚本指令使用H.f调用这个方法。(H是我自建类的类名)
脚本指令那一行,我除了写了“H.f”以外,再也没写任何其他内容。

代码为了方便看,我删除了一些,但是删了的那些全都是“开关XX = false”的代码,没其他复杂的代码。所以想代码本身应该是没问题的。

如果我使用了你的修复代码,能解决这种脚本调用脚本编辑器代码的BUG吗?
soulsaga 发表于 2020-1-1 22:48:34
本帖最后由 soulsaga 于 2020-1-1 22:50 编辑

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● スクリプト
  3.   # イベントコマンドの「スクリプト」の一行目がfalseになると
  4.   # フリーズするバグの修正
  5.   #--------------------------------------------------------------------------
  6.   def command_355
  7.     # script に 1 行目を設定
  8.     script = @list[@index].parameters[0] + "\n"
  9.     # インデックスを増やす(修正)
  10.     @index += 1
  11.     # ループ
  12.     loop do
  13.       # 次のイベントコマンドがスクリプト 2 行目以降の場合(修正)
  14.       if @list[@index].code == 655
  15.         # script に 2 行目以降を追加
  16.         script += @list[@index].parameters[0] + "\n"
  17.         # インデックスを進める
  18.         @index += 1
  19.       # イベントコマンドがスクリプト 2 行目以降ではない場合
  20.       else
  21.         # ループ中断
  22.         break
  23.       end
  24.     end
  25.     # 評価
  26.     result = eval(script)
  27.     # 戻り値が false の場合
  28.     if result == false
  29.       # 終了
  30.       return false
  31.     end
  32.     # 戻り値がfalseでない場合、インデックスを戻す
  33.     @index -= 1
  34.     # 継続
  35.     return true
  36.   end

国外的修BUG脚本...不过你这个我觉得无关..
BUG是事件脚本才有的..你写的应该没BUG?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-23 09:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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