じ☆ve冰风 发表于 昨天 10:22

(VX)如何在通关真结局之后替换掉原有标题画面?

实现效果
玩家打出真结局后,以后每次打开游戏,标题画面都会自动换成通关后的特殊标题图(跨存档,删了存档也还在)。

准备工作
先准备好两张标题背景图,都放到 Graphics/System
图片名                              用途Title.png                     默认标题图(原来的那张)
Title_True.png             通关后的标题图(自己命名,比如叫 Title_Ending 也行)
(图片名字可以自己改,后面脚本里对应改就行)

完整的 Scene_Title 脚本(可直接全选粘贴替换)#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#標題畫面
#修改:通關真結局後自動更換標題畫面和標題音樂
#==============================================================================

class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# * 主處理
#--------------------------------------------------------------------------
def main
    if $BTEST
      battle_test
      return
    end
    super
end
#--------------------------------------------------------------------------
# * 開始處理
#--------------------------------------------------------------------------
def start
    super
    create_title_graphic
    create_command_window
    play_title_music
end
#--------------------------------------------------------------------------
# * 結束處理
#--------------------------------------------------------------------------
def terminate
    super
    @sprite.dispose
    @command_window.dispose
end
#--------------------------------------------------------------------------
# * 更新畫面
#--------------------------------------------------------------------------
def update
    super
    @command_window.update
    update_command
end
#--------------------------------------------------------------------------
# ★ 創建標題圖形(通關後自動更換)
#--------------------------------------------------------------------------
def create_title_graphic
    @sprite = Sprite.new
    # 判斷是否通關:如果 true_ending.dat 文件存在,就用通關後的標題圖
    if FileTest.exist?("true_ending.dat")
      @sprite.bitmap = Cache.system("Title_True")# 通關後的標題圖
    else
      @sprite.bitmap = Cache.system("Title")       # 默認標題圖
    end
end
#--------------------------------------------------------------------------
# * 創建指令視窗
#--------------------------------------------------------------------------
def create_command_window
    s1 = Vocab::new_game
    s2 = Vocab::continue
    s3 = Vocab::shutdown
    @command_window = Window_Command.new(172, )
    @command_window.x = (544 - @command_window.width) / 2
    @command_window.y = 288
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.draw_item(1, false)
    end
    @command_window.openness = 0
    @command_window.open
end
#--------------------------------------------------------------------------
# ★ 播放標題音樂(通關後自動更換)
#--------------------------------------------------------------------------
def play_title_music
    if FileTest.exist?("true_ending.dat")
      # 通關後的標題音樂(引號裡改音樂文件名,不用加後綴)
      RPG::BGM.new("Title_True", 100, 100).play
    else
      # 默認標題音樂
      $data_system.title_bgm.play
    end
    RPG::BGS.stop
    RPG::ME.stop
end
#--------------------------------------------------------------------------
# * 更新指令
#--------------------------------------------------------------------------
def update_command
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
      command_new_game
      when 1
      command_continue
      when 2
      command_shutdown
      end
    end
end
#--------------------------------------------------------------------------
# * 確定繼續遊戲的有效性
#--------------------------------------------------------------------------
def continue_enabled
    return false unless FileTest.exist?("Save1.rvdata")
    return true
end
#--------------------------------------------------------------------------
# * 指令:新遊戲
#--------------------------------------------------------------------------
def command_new_game
    Sound.play_decision
    $game_system = Game_System.new
    $game_message = Game_Message.new
    $game_switches = Game_Switches.new
    $game_variables = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen = Game_Screen.new
    $game_actors = Game_Actors.new
    $game_party = Game_Party.new
    $game_troop = Game_Troop.new
    $game_map = Game_Map.new
    $game_player = Game_Player.new
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $scene = Scene_Map.new
    RPG::BGM.fade(800)
    RPG::BGS.fade(800)
    RPG::ME.fade(800)
end
#--------------------------------------------------------------------------
# * 指令:繼續遊戲
#--------------------------------------------------------------------------
def command_continue
    unless continue_enabled
      Sound.play_buzzer
      return
    end
    Sound.play_decision
    $scene = Scene_File.new(false, false, false)
end
#--------------------------------------------------------------------------
# * 指令:結束遊戲
#--------------------------------------------------------------------------
def command_shutdown
    Sound.play_decision
    $scene = nil
end
#--------------------------------------------------------------------------
# * 戰鬥測試
#--------------------------------------------------------------------------
def battle_test
    $data_actors      = load_data("Data/Actors.rvdata")
    $data_classes       = load_data("Data/Classes.rvdata")
    $data_skills      = load_data("Data/Skills.rvdata")
    $data_items         = load_data("Data/Items.rvdata")
    $data_weapons       = load_data("Data/Weapons.rvdata")
    $data_armors      = load_data("Data/Armors.rvdata")
    $data_enemies       = load_data("Data/Enemies.rvdata")
    $data_troops      = load_data("Data/Troops.rvdata")
    $data_states      = load_data("Data/States.rvdata")
    $data_animations    = load_data("Data/Animations.rvdata")
    $data_tilesets      = load_data("Data/Tilesets.rvdata")
    $data_common_events = load_data("Data/CommonEvents.rvdata")
    $data_system      = load_data("Data/System.rvdata")
    $game_system = Game_System.new
    $game_message = Game_Message.new
    $game_switches = Game_Switches.new
    $game_variables = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen = Game_Screen.new
    $game_actors = Game_Actors.new
    $game_party = Game_Party.new
    $game_troop = Game_Troop.new
    $game_map = Game_Map.new
    $game_player = Game_Player.new
    for i in 0...$data_system.party_members.size
      actor = $game_actors[$data_system.party_members]
      $game_party.add_actor(actor.id)
    end
    $game_party.make_actors_battle_test
    $game_troop.setup($data_system.battle_test_troop_id)
    $game_troop.can_escape = true
    $game_troop.can_lose = true
    $game_temp.battle_proc = Proc.new { $scene = nil }
    $scene = Scene_Battle.new
end
end


需要你改的两个地方
1. 标题图片名(第 35 行左右)
@sprite.bitmap = Cache.system("Title_True")# 通关后的标题图复制代码
把 "Title_True" 改成你通关后标题图的文件名(放在 Graphics/System 文件夹里,不用加 .png)。


2. 标题音乐名(第 72 行左右)
RPG::BGM.new("Title_True", 100, 100).play复制代码
把 "Title_True" 改成你通关后标题音乐的文件名(放在 Audio/BGM 文件夹里,不用加 .mp3/.ogg)。
如果不想换音乐,就把这三行删掉,只保留 $data_system.title_bgm.play 那行。


结局事件里加的脚本
在真结局的最后,加一条「脚本」指令(第 3 页→进阶的指令→脚本),输入:

File.open("true_ending.dat", "w") { |f| f.write("1") }复制代码这行代码会在游戏目录下创建一个 true_ending.dat 文件,作为通关标记。


测试方法
先把脚本替换好打开游戏,确认标题还是默认的(说明没通关时正常)触发真结局,运行那行脚本退出游戏,重新打开标题画面应该变成通关后的样子了


想恢复默认怎么办?
去游戏目录下,删掉 true_ending.dat 这个文件,标题就变回默认的了。










            本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=499063若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: (VX)如何在通关真结局之后替换掉原有标题画面?