赞 | 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感谢您的热情解答~ |
|