# 3.セーブの削除機能 と大体同じ処理 module Sound # クラッシュ @@crash = RPG::SE.new("Crash", 80) def self.play_crash @@crash.play end end class Window_SaveFile #-------------------------------------------------------------------------- # ● セーブファイルの削除 #-------------------------------------------------------------------------- def delete File.delete(@filename) load_gamedata refresh end end # 削除を確認するためのウィンドウ # コマンドウィンドウを参考に作成しています。 class Window_SaveDelete < Window_Selectable #-------------------------------------------------------------------------- # ● 定数 #-------------------------------------------------------------------------- TEXT = "セーブファイルを削除します。" COMMANDS = ["はい", "いいえ"] #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(80, 168, 384, 80, 8) @item_max = COMMANDS.size @column_max = 2 self.index = 1 self.openness = 0 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.draw_text(0, 0, 352, WLH, TEXT, 1) for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 # enabled : 有効フラグ。false のとき半透明で描画 #-------------------------------------------------------------------------- def draw_item(index, enabled = true) rect = item_rect(index) rect.x += 4 rect.width -= 8 self.contents.clear_rect(rect) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(rect, COMMANDS[index], 1) end #-------------------------------------------------------------------------- # ● 項目を描画する矩形の取得 # index : 項目番号 #-------------------------------------------------------------------------- def item_rect(index) rect = Rect.new(0, 0, 0, 0) rect.width = (contents.width + @spacing) / @column_max - @spacing rect.height = WLH rect.x = index % @column_max * (rect.width + @spacing) rect.y = WLH return rect end end class Scene_File #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias _del_start start def start _del_start @delete_window = Window_SaveDelete.new # 削除確認ウィンドウの作成 end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias _del_terminate terminate def terminate _del_terminate @delete_window.dispose # 削除確認ウィンドウの削除 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super last_index = @command_window.index update_menu_background @title_window.update @command_window.update update_savefile_windows @delete_window.update # 削除確認ウィンドウの更新 if @command_window.active # コマンドウィンドウ操作中 # ここは元の処理 if @command_window.index != last_index @savefile_windows[last_index].visible = false @savefile_windows[@command_window.index].visible = true end @index = @command_window.index update_savefile_selection else # 削除確認ウィンドウ表示中の処理 if Input.trigger?(Input::B) Sound.play_cancel close_delete_window elsif Input.trigger?(Input::C) if @delete_window.index == 0 Sound.play_crash @savefile_windows[@index].delete else Sound.play_cancel end close_delete_window end end end #-------------------------------------------------------------------------- # ● 削除ウィンドウを閉じる #-------------------------------------------------------------------------- def close_delete_window @command_window.active = true # コマンドウィンドウの操作有効化 @delete_window.close # 削除確認ウィンドウを閉じる end #-------------------------------------------------------------------------- # ● セーブファイル選択の更新 #-------------------------------------------------------------------------- alias _del_update_savefile_selection update_savefile_selection def update_savefile_selection if Input.trigger?(Input::A) if @savefile_windows[@index].file_exist # セーブファイルが存在するなら Sound.play_decision @command_window.active = false # コマンドウィンドウの操作無効化 @delete_window.index = 1 # カーソル位置を初期化 (いいえ) @delete_window.open # 削除確認ウィンドウを開く else Sound.play_buzzer end end _del_update_savefile_selection end end