目录
本文对上一节中生成$game_system的类Game_System进行解析。
Game_System类代码解析
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# 处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考
# $game_system 。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :map_interpreter # 地图事件用解释程序 #只有这两个是“只读”属性
attr_reader :battle_interpreter # 战斗事件用解释程序
attr_accessor :timer # 计时器
attr_accessor :timer_working # 计时器执行中的标志
attr_accessor :save_disabled # 禁止存档
attr_accessor :menu_disabled # 禁止菜单
attr_accessor :encounter_disabled # 禁止遇敌
attr_accessor :message_position # 文章选项 显示位置
attr_accessor :message_frame # 文章选项 窗口外关
attr_accessor :save_count # 存档次数
attr_accessor :magic_number # 魔法编号 #这个东西在本类中只出现了一次(初始化),不知道后续会不会遇到
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize #初始化方法
@map_interpreter = Interpreter.new(0, true) #Interpreter是游戏内定义的类(看着分了七个定义,那确实很长)
@battle_interpreter = Interpreter.new(0, false)
@timer = 0 #计时器置0
@timer_working = false #计时器工作标志置否
@save_disabled = false #禁止存档标志置否
@menu_disabled = false #禁止调出菜单标志置否
@encounter_disabled = false #禁止遇敌标志置否
@message_position = 2 #文章显示位置为2(正下方) 1中间 0上方
@message_frame = 0 #窗口外观为0(显示窗口) 1不显示窗口
@save_count = 0 #存档次数置0
@magic_number = 0 #魔法编号置0 (目前不知道具体指的是什么)
end
#--------------------------------------------------------------------------
# ● 演奏 BGM
# bgm : 演奏的 BGM
#--------------------------------------------------------------------------
def bgm_play(bgm)
@playing_bgm = bgm #全局变量标志正在演奏的bgm
if bgm != nil and bgm.name != "" #要求的bgm名不为nil且其name属性也不为nil时
Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch) #Audio为RGSS的内部类,此方法按照Audio.bgm_play(文件名[, 音量[, 节拍(可能是速度)]]) 播放一段音乐。
else
Audio.bgm_stop #其他情况只终止bug
end
Graphics.frame_reset #Graphics为RGSS的内部类。此方法防止跳帧(猜测与RGSS更新画面的方法有关)
end
#--------------------------------------------------------------------------
# ● 停止 BGM
#--------------------------------------------------------------------------
def bgm_stop
Audio.bgm_stop #单纯就是停止而已啦
end
#--------------------------------------------------------------------------
# ● BGM 的淡出
# time : 淡出时间 (秒)
#--------------------------------------------------------------------------
def bgm_fade(time)
@playing_bgm = nil #因为要淡出了,播放的bgm自然置nil
Audio.bgm_fade(time * 1000) #RGSS淡出bgm的方法
end
#--------------------------------------------------------------------------
# ● 记忆 BGM
#--------------------------------------------------------------------------
def bgm_memorize #这个方法记住现在播放的bgm并存储到@memorized_bgm中
@memorized_bgm = @playing_bgm
end
#--------------------------------------------------------------------------
# ● 还原 BGM
#--------------------------------------------------------------------------
def bgm_restore #播放处于记忆中的bgm
bgm_play(@memorized_bgm)
end
#--------------------------------------------------------------------------
# ● 演奏 BGS
# bgs : 演奏的 BGS
#--------------------------------------------------------------------------
#后略,反正差不多的
def bgs_play(bgs)
@playing_bgs = bgs
if bgs != nil and bgs.name != ""
Audio.bgs_play("Audio/BGS/" + bgs.name, bgs.volume, bgs.pitch)
else
Audio.bgs_stop
end
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# ● BGS 的淡出
# time : 淡出时间 (秒)
#--------------------------------------------------------------------------
def bgs_fade(time)
@playing_bgs = nil
Audio.bgs_fade(time * 1000)
end
#--------------------------------------------------------------------------
# ● 记忆 BGS
#--------------------------------------------------------------------------
def bgs_memorize
@memorized_bgs = @playing_bgs
end
#--------------------------------------------------------------------------
# ● 还原 BGS
#--------------------------------------------------------------------------
def bgs_restore
bgs_play(@memorized_bgs)
end
#--------------------------------------------------------------------------
# ● ME 的演奏
# me : 演奏的 ME
#--------------------------------------------------------------------------
def me_play(me)
if me != nil and me.name != ""
Audio.me_play("Audio/ME/" + me.name, me.volume, me.pitch)
else
Audio.me_stop
end
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# ● SE 的演奏
# se : 演奏的 SE
#--------------------------------------------------------------------------
def se_play(se)
if se != nil and se.name != ""
Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
end
end
#--------------------------------------------------------------------------
# ● 停止 SE #SE这么短也要停??#想知道有哪位用了这个功能..
#--------------------------------------------------------------------------
def se_stop
Audio.se_stop
end
#--------------------------------------------------------------------------
# ● 获取演奏中 BGM
#--------------------------------------------------------------------------
def playing_bgm
return @playing_bgm
end
#--------------------------------------------------------------------------
# ● 获取演奏中 BGS
#--------------------------------------------------------------------------
def playing_bgs
return @playing_bgs
end
#--------------------------------------------------------------------------
# ● 获取窗口外观的文件名
#--------------------------------------------------------------------------
def windowskin_name
if @windowskin_name == nil #如果本类的标记为空
return $data_system.windowskin_name #就使用文件里记载的名字
else
return @windowskin_name
end #也就是说,游戏里事件的设置优先于文件里的设置
end
#--------------------------------------------------------------------------
# ● 设置窗口外观的文件名
# windowskin_name : 新的窗口外观文件名
#--------------------------------------------------------------------------
def windowskin_name=(windowskin_name)
@windowskin_name = windowskin_name
end
#--------------------------------------------------------------------------
# ● 获取战斗 BGM
#--------------------------------------------------------------------------
def battle_bgm
if @battle_bgm == nil #这里的同上
return $data_system.battle_bgm
else
return @battle_bgm
end
end
#--------------------------------------------------------------------------
# ● 设置战斗 BGM
# battle_bgm : 新的战斗 BGM
#--------------------------------------------------------------------------
def battle_bgm=(battle_bgm)
@battle_bgm = battle_bgm
end
#--------------------------------------------------------------------------
# ● 获取战斗结束的 BGM
#--------------------------------------------------------------------------
def battle_end_me
if @battle_end_me == nil
return $data_system.battle_end_me
else
return @battle_end_me
end
end
#--------------------------------------------------------------------------
# ● 设置战斗结束的 BGM
# battle_end_me : 新的战斗结束 BGM
#--------------------------------------------------------------------------
def battle_end_me=(battle_end_me)
@battle_end_me = battle_end_me
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update #系统刷新的同时,如果计时器在工作也要刷新计时器
# 计时器减 1
if @timer_working and @timer > 0
@timer -= 1
end
end
end
类变量表
总结
先来看看RM游戏内的事件系统截图:
这个类提供了很多给游戏内部事件系统的接口方法,并且处理了游戏属性数据与事件新定义的数据之间的取舍。