Project1

标题: RTAB脚本中哪句是停止计时? [打印本页]

作者: VIVICAT    时间: 2009-9-1 18:57
标题: RTAB脚本中哪句是停止计时?
在特技选择、物品选择的时候好像会停下来吧,具体在脚本里是在哪呢?
作者: VIVICAT    时间: 2009-9-2 10:50
高手们帮个忙吧···
作者: dbshy    时间: 2009-9-2 19:11
本帖最后由 dbshy 于 2009-9-2 21:39 编辑

我现在越来越佩服这个RTAB的作者了 >_<

为什么会停下来,这个说来话长

因为窗口的at槽在refresh,所以会不断增长
具体请全局搜索at_refresh方法

先看下面这段
  1. case @phase
  2.     when 0  # ATゲージ更新フェーズ
  3.       [color=Magenta]if anime_wait_return
  4.         update_phase0[/color]      
  5.     end
  6.     when 1  # プレバトルフェーズ
  7.       update_phase1
  8.       return
  9.     when 2  # パーティコマンドフェーズ
  10.       update_phase2
  11.       return
  12.     when 5  # アフターバトルフェーズ
  13.       update_phase5
  14.       return
  15.     end
  16.     if $scene != self
  17.       return
  18.     end
  19.     if @phase == 0
  20.       if @command.size != 0  # アクターコマンドフェーズ
  21.         if @command_a == false
  22.           start_phase3
  23.         end
  24.         update_phase3
  25.       end
  26.       # ウェイト中の場合
  27.       if @wait_count > 0
  28.         # ウェイトカウントを減らす
  29.         @wait_count -= 1
  30.         return
  31.       end
  32.       update_phase4
  33.     end
复制代码
其中的update_phase0就是刷新每个队员和敌人的at值的
   具体代码就是
  1.   battler.at += battler.agi
  2.           if battler.guarding?
  3.             battler.at += battler.agi
  4.           end
  5.           if battler.movable?
  6.             battler.atp = 100 * battler.at / @max
  7.           end
复制代码
不过在运行这段的时候,前面有个
    if anime_wait_return
    内容见下

def anime_wait_return
    if (@action_battlers.empty? or @anime_wait == false) and
        not $game_system.battle_interpreter.running?
      # エネミーアローが有効の場合
      if @enemy_arrow != nil
        return [@active - 2, 0].min == 0
      # アクターアローが有効の場合
      elsif @actor_arrow != nil
        return [@active - 2, 0].min == 0
      # スキルウィンドウが有効の場合
      elsif @skill_window != nil
        return [@active - 3, 0].min == 0
      # アイテムウィンドウが有効の場合
      elsif @item_window != nil
        return [@active - 3, 0].min == 0
      # アクターコマンドウィンドウが有効の場合
      elsif @actor_command_window.active
        return [@active - 1, 0].min == 0
      else
        return true
      end
    else
      return false
    end
  end

注意加色的那一段,全局搜索@active = 1
所以返回false,那么就不会刷新增加at的那一段
综上所述,就停下来了

说完了,好累.....
不知道偶讲清楚没有>_<
作者: VIVICAT    时间: 2009-9-2 23:50
3# dbshy


恩恩,大概明白了
再弱弱地问一句···这句是什么意思?返回的是括号里的东西还是0啊?
return [@active - 3, 0].min == 0
作者: y7640f    时间: 2009-9-3 00:21
标题: 看啥呢?
小锤
作者: dbshy    时间: 2009-9-3 15:08
你说的那句等价于
if [@active - 3, 0].min == 0 then
return true
else
return false
end

ps:lz问这个是想实现什么效果呢??
作者: VIVICAT    时间: 2009-9-3 15:28
使用特定特技后敌人和使用特技者停止一段时间,其他同伴继续
谢谢解答~
恩恩,[@active - 3, 0].min这个呢···即时程度最小值??
作者: dbshy    时间: 2009-9-3 16:52
本帖最后由 dbshy 于 2009-9-3 16:54 编辑

- -bbbb
@active = 1
so,[@active - 3, 0].min = -2 != 0 return false

lz说的问题
关键是这段

battler.at += battler.agi

          if battler.guarding?

            battler.at += battler.agi

          end

          if battler.movable?

            battler.atp = 100 * battler.at / @max

          end
用if来判断
作者: VIVICAT    时间: 2009-9-3 17:39
喔······好,谢谢




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