如果你不要求記錄中斷時候的位置,只記錄音樂文件的名字是很簡單的,在附加狀態的方法裏加一個id判斷,如果id==x就切換bgm並且記錄被切換掉的bgm的文件名字
不過你的遊戲有戰鬥,那就要用2個變量,1個用來記錄地圖上的音樂文件名字,1個用來記錄戰鬥中音樂文件名字
具體流程就象這樣
從地圖進入戰鬥時
#-------------------------------------------------------------------------- # ● 切换战斗画面前的处理 #-------------------------------------------------------------------------- def pre_battle_scene Graphics.update Graphics.freeze @spriteset.dispose_characters BattleManager.save_bgm_and_bgs#保存進入戰鬥前的bgm和bgs BattleManager.play_battle_bgm Sound.play_battle_start end
#--------------------------------------------------------------------------
# ● 切换战斗画面前的处理
#--------------------------------------------------------------------------
def pre_battle_scene
Graphics.update
Graphics.freeze
@spriteset.dispose_characters
BattleManager.save_bgm_and_bgs#保存進入戰鬥前的bgm和bgs
BattleManager.play_battle_bgm
Sound.play_battle_start
end
從戰鬥中離開時
#-------------------------------------------------------------------------- # ● 胜利时的处理 #-------------------------------------------------------------------------- def self.process_victory play_battle_end_me replay_bgm_and_bgs#恢復進入戰鬥前的bgm和bgs $game_message.add(sprintf(Vocab::Victory, $game_party.name)) display_exp gain_gold gain_drop_items gain_exp SceneManager.return battle_end(0) return true end #-------------------------------------------------------------------------- # ● 撤退时的处理 #-------------------------------------------------------------------------- def self.process_escape $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name)) success = @preemptive ? true : (rand < @escape_ratio) Sound.play_escape if success process_abort else @escape_ratio += 0.1 $game_message.add('\.' + Vocab::EscapeFailure) $game_party.clear_actions end wait_for_message return success end #-------------------------------------------------------------------------- # ● 中止时的处理 #-------------------------------------------------------------------------- def self.process_abort replay_bgm_and_bgs SceneManager.return battle_end(1) return true end
#--------------------------------------------------------------------------
# ● 胜利时的处理
#--------------------------------------------------------------------------
def self.process_victory
play_battle_end_me
replay_bgm_and_bgs#恢復進入戰鬥前的bgm和bgs
$game_message.add(sprintf(Vocab::Victory, $game_party.name))
display_exp
gain_gold
gain_drop_items
gain_exp
SceneManager.return
battle_end(0)
return true
end
#--------------------------------------------------------------------------
# ● 撤退时的处理
#--------------------------------------------------------------------------
def self.process_escape
$game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
success = @preemptive ? true : (rand < @escape_ratio)
Sound.play_escape
if success
process_abort
else
@escape_ratio += 0.1
$game_message.add('\.' + Vocab::EscapeFailure)
$game_party.clear_actions
end
wait_for_message
return success
end
#--------------------------------------------------------------------------
# ● 中止时的处理
#--------------------------------------------------------------------------
def self.process_abort
replay_bgm_and_bgs
SceneManager.return
battle_end(1)
return true
end
按照進入戰鬥前保存bgm,改變bgm,離開戰鬥讀取bgm的思路
附加指定狀態前保存bgm,改變bgm,移除指定狀態讀取bgm |