Project1

标题: 哪位高手讲一下Scene_Battle中的update怎样运行的 [打印本页]

作者: dbshy    时间: 2008-2-10 01:39
标题: 哪位高手讲一下Scene_Battle中的update怎样运行的
哪位高手讲一下Scene_Battle中的update怎样运行的

[LINE]1,#dddddd[/LINE]帖子已被修改,详情请看版规
[LINE]1,#dddddd[/LINE]

如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)

[LINE]1,#dddddd[/LINE]此贴于 2008-2-15 20:54:39 被版主凌冰提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-2-15 21:23:08 被版主凌冰提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 面粉    时间: 2008-2-10 11:35
不太清楚楼主需要何种解释……

这里粗略说一下……

以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的逐渐累加依次进行调用)

说的也不是很清楚……咳…… [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: link006007    时间: 2008-2-10 22:59
刷新事件       如果需要
刷新计时器
刷新图形
处理场景过度   如果需要
判断场景切换
等待行动中角色
执行,推进战斗过程(战斗,命令,结束等等根据进度执行其一)




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