| 
 
| 赞 | 0 |  
| VIP | -1 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 125905 |  
| 最后登录 | 2013-11-3 |  
| 在线时间 | 1 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间1 小时注册时间2005-10-22帖子519 | 
| 不太清楚楼主需要何种解释…… 
 这里粗略说一下……
 
 以XP的为例。
 
 Scene_Battle类的实例从Main方法开始执行。Main方法内,有一段
 
 loop do
 # 刷新游戏画面
 Graphics.update
 # 刷新输入信息
 Input.update
 # 刷新画面
 update
 # 如果画面切换的话就中断循环
 if $scene != self
 break
 end
 end
 
 
 上面代码中的update就是调用Scene_Battle的Update方法。
 
 这样子Update方法按照一定的执行周期反复执行。
 
 update方法内,第一部分是含有大量if的条件分歧。用$开头的各种全局变量来判断某些场合的例外处理,比如
 # 计时器为 0 的情况下
 if $game_system.timer_working and $game_system.timer == 0
 # 中断战斗
 $game_temp.battle_abort = true
 end
 
 再就是负责战斗场景窗口刷新的部分
 
 @status_window.update
 @message_window.update
 等等
 (负责调用所有该场景窗口的update方法)。
 
 你可以把update方法想象成每帧调用一次,这样子,该场景内所有的窗口实例的update方法都会被调用,从而实现窗口的即时刷新。
 
 还有一部分,就是利用@phase 这个标志量,对他进行case分歧,来选择调用的合适的阶段update方法,从而达到战斗场景规律性的前进。
 
 # 回合分支
 case @phase
 when 1  # 自由战斗回合
 update_phase1
 when 2  # 同伴命令回合
 update_phase2
 when 3  # 角色命令回合
 update_phase3
 when 4  # 主回合
 update_phase4
 when 5  # 战斗结束回合
 update_phase5
 end
 
 (选择人物命令,选择敌人,刷新动画,====,按照@phase的逐渐累加依次进行调用)
 
 说的也不是很清楚……咳……
 系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
 | 
 |