Project1

标题: 请教关于遇敌前调用公共事件的处理方法。 [打印本页]

作者: 文雅夕露    时间: 2018-4-4 21:52
标题: 请教关于遇敌前调用公共事件的处理方法。
  1. #--------------------------------------------------------------------------
  2.   # ● 监听遇敌事件
  3.   #--------------------------------------------------------------------------
  4.   def update_encounter
  5.   $game_temp.reserve_common_event(3) && SceneManager.call(Scene_Battle) if $game_player.encounter
  6.   end
复制代码

这么写会直接将战斗调用的效果消除?
请教各位前辈该怎么修改或者有什么好的思路能够实现?
作者: 失落的乐章    时间: 2018-4-4 22:12
本帖最后由 失落的乐章 于 2018-4-4 22:14 编辑

Ruby 的 && 是逻辑运算符,不是用来执行多条命令的。
  1.   def update_encounter
  2.     if $game_player.encounter
  3.       $game_temp.reserve_common_event(3)
  4.       SceneManager.call(Scene_Battle)
  5.     end
  6.   end
复制代码

写成这样试试?(我没有测试过)
作者: 文雅夕露    时间: 2018-4-4 22:18
失落的乐章 发表于 2018-4-4 22:12
Ruby 的 && 是逻辑运算符,不是用来执行多条命令的。

写成这样试试?(我没有测试过) ...

嗯...我分开写也一样的。前辈提供的方法也行不通,结果是进入战斗后才调用该公共事件。
我也尝试了很多方法,都无法在遇敌前调用公共事件再进入战斗场景...
作者: 失落的乐章    时间: 2018-4-4 23:10
文雅夕露 发表于 2018-4-4 22:18
嗯...我分开写也一样的。前辈提供的方法也行不通,结果是进入战斗后才调用该公共事件。
我也尝试了很多方 ...

我找到一个比较别扭的解决方案:
  1.   def update_encounter
  2.     if $game_player.encounter
  3.        $game_temp.reserve_common_event(3)
  4.        $game_map.setup_starting_event
  5.        $game_temp.reserve_common_event(4)
  6.     end
  7.   end
复制代码

然后在4号公共事件中执行脚本:
  1. SceneManager.call(Scene_Battle)
复制代码

我相信肯定有更好的办法……
作者: 文雅夕露    时间: 2018-4-4 23:22
失落的乐章 发表于 2018-4-4 23:10
我找到一个比较别扭的解决方案:

然后在4号公共事件中执行脚本:


谢谢前辈提供的思路。
测试发现的确可行。
可以考虑将公共事件里写调用战斗的方法。
因为前辈这方法会多占用了一个公共事件。
  1. #--------------------------------------------------------------------------
  2.   # ● 监听遇敌事件
  3.   #--------------------------------------------------------------------------
  4.   def update_encounter
  5.   $game_temp.reserve_common_event(3) if $game_player.encounter
  6.   SceneManager.call(Scene_Battle) if $game_player.encounter
  7.   end
复制代码


作者: 芯☆淡茹水    时间: 2018-4-5 13:16
本帖最后由 芯☆淡茹水 于 2018-4-5 13:37 编辑

怎么看着这样写略眼熟呢。

本人的个人写法习惯,就是利用逻辑 与 的特性(前面的为 false 或 nil ,不会执行后面的),
省略写 if ,觉得写 && 比写 if 快一些,并且从顺序上来说好理解一些。

条件 && 执行  
条件1 && 条件2 && 条件3 ... && 执行
就是这么简单。

但是,大部分情况下, 执行的函数只有最后面那一个。
比如:
  1. a = rand 10
  2. a > 5 && p("大")
复制代码

或者:
  1. a = rand 10
  2. a > 3 && a < 7 && p("适中")
复制代码


像楼主这样,如果 $game_temp.reserve_common_event(3) 返回的是 false 或 nil ,
后面的 SceneManager.call(Scene_Battle) 是不会执行的。

如果按主楼那样,照这个方法写,一般都是把要执行的 多个函数 放到一个函数里。
  1. def update_encounter
  2.   $game_player.encounter && prepare_battle
  3. end
  4. def prepare_battle
  5.   $game_temp.reserve_common_event(3)
  6.   SceneManager.call(Scene_Battle)
  7. end
复制代码


如果非要一次执行多个函数,必须保证 最后那个执行函数 之前的 所有执行函数 ,返回的都不是 false 或 nil 。

照此类推,逻辑 或 (||),也可以这样使用,
比如 $game_temp.reserve_common_event(3) 返回的是 false 或 nil 就可以这样:
  1. def update_encounter
  2.   $game_player.encounter && prepare_battle
  3. end
  4. def prepare_battle
  5.   $game_temp.reserve_common_event(3) || SceneManager.call(Scene_Battle)
  6. end
复制代码


但这样相对来说实用性不大,如果非要写作一行并且看起来比较好看的话,还不如加 ; 号。






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