Project1

标题: [艾薇脚本学习]Scene_Battle中主回合更新问题 [打印本页]

作者: 艾薇    时间: 2009-10-29 22:11
标题: [艾薇脚本学习]Scene_Battle中主回合更新问题
本帖最后由 艾薇 于 2009-10-30 09:14 编辑

最近一直潜心研究RPGMakerXP代码部分,不懂的好多哦。
我的问题如下:
问题位置:Scene_Battle4中update_phase4_step2


问题代码:
    # 如果不是强制行动
    unless @active_battler.current_action.forcing
      # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 设置行动为攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
    end

问题描述:
我主要是不明白这段话:

      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end

据我理解,当当前行动对象不是强制行动对象并且该对象被限制为不能行动,则清除行动强制对像的战斗者并转移至主回合步骤1……

问题是当前行动对象被限制为不能行动,和临时数据中设置的forcing_battler有啥关系呀……扯不上么…… 不懂,望解答~~

PS:如果找到了答案,如何关闭问题我也不知道撒,有知道的人请解答,3Q


======================我是开心的分割线====================

总结:

根据后知后觉君和紫苏君和我本人,基本判定在unless嵌套下的第二个if该语句90%概率是多余的。

以上。
作者: 后知后觉    时间: 2009-10-29 22:29
事件指令里有个是 强制行动
如果当前行动者就是这个被强制行动的话.
状态附加的限制效果就无效了
作者: 艾薇    时间: 2009-10-29 22:40
unless @active_battler.current_action.forcing
不是表示的是当前行动对象不是强制行动对象么……
而且,  执行下面这句的时候,也没有判断是不是当前行动者被强制行动,直接就清了   
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil

呃,偶太愚钝了,还望解释的详细些~~~
作者: 后知后觉    时间: 2009-10-29 22:57
# 如果不是强制行动
    unless @active_battler.current_action.forcing
上面这一行满足的时候才会进行下面的内容.根据语法  unless~~end.你找找看这个unless对应的end是哪一个?
      # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 设置行动为攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
这个end是上面那个if的end
      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
这个end是第二个if的end
    end
最后这个end才是unless的end
那2个if是在unless~~~end之间所以这个unless~~~end就是这2个if的大前提
作者: 艾薇    时间: 2009-10-29 23:18
这个unless~~~end就是这2个if的大前提——明白。就是不明白为什么不判断  $game_temp.forcing_battler 中存的是不是当前行动者就清了……= =
作者: 艾薇    时间: 2009-10-29 23:38
呃,貌似在进入主回合步骤2刷新前,执行事件解释器,可能将当前行动者设为forcing_battler
但是这样又衍生了一个问题:
@active_battler.current_action.forcing=false难道$game_temp.forcing_battler = nil
不应该为空么??
前者表示当前行动者不是强制行动,后者表示没有强制行动者
如果强制行动者就是当前行动者,两者应该是统一的呀呀呀呀呀呀
我混乱了……
作者: 后知后觉    时间: 2009-10-29 23:54
这个就要从头看了
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      start_phase2
      return
    end
    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift

强制行动的人会在每个回合最开始就行动
而在解释器的强制行动里找到这样几行
        # 设置强制标志
        battler.current_action.forcing = true
        # 行动有效并且是 [立即执行] 的情况下
        if battler.current_action.valid? and @parameters[5] == 1
          # 设置强制对像的战斗者
          $game_temp.forcing_battler = battler

角色的强制行动标志和$game_temp的是同时设置 的
根据逻辑判断角色是强制行动那就必然是和$game_temp指向的同一个人
但是既然都unless了又干嘛还要清楚一次
这个答案没找到
或许是在某个角落里.或许这一行是多余的- -
要把脚本全部看完记熟了才晓得- -
作者: 紫苏    时间: 2009-10-30 08:06
这两者是不同的——
@active_battler.current_action.forcing 这个变量标记了 @active_battler 当前是否强制行动;
$game_temp.forcing_battler 则是当前强制且立即行动的战斗者对象~
从楼上后知的代码中就不难看出,$game_temp.forcing_battler 所标记的战斗者是 Game_BattleAction#forcing 所标记的战斗者的一个子集,所以在一回合中,强制行动命令执行后,Game_BattleAction#clear 调用之前的任何时候“BattleAction#forcing 不为真 => $game_temp.forcing_battler 为空”这个引理都为真,这样清空立即行动的战斗者看来这一句确实是多余的~

参考:
http://rpg.blue/viewthread.php?tid=120946
作者: 艾薇    时间: 2009-10-30 09:11
本帖最后由 艾薇 于 2009-10-30 19:11 编辑

谢谢后知后觉君和紫苏君。看样子是多余的概率有99%。我就当它多余的吧,标记一下,以后看完相关类,再回来看看。最终再确认1%,吼吼\(^o^)/~
以后有其他问题还请多多关照。

PS:不会结贴。麻烦哪位指个路呀~~吼吼




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