设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 31|回复: 0
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
4 小时
注册时间
2026-6-21
帖子
4
跳转到指定楼层
1
发表于 前天 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 31号焦糖色 于 2026-6-23 10:51 编辑

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

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

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

  7. class Scene_Title < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # * 主處理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     if $BTEST
  13.       battle_test
  14.       return
  15.     end
  16.     super
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # * 開始處理
  20.   #--------------------------------------------------------------------------
  21.   def start
  22.     super
  23.     create_title_graphic
  24.     create_command_window
  25.     play_title_music
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # * 結束處理
  29.   #--------------------------------------------------------------------------
  30.   def terminate
  31.     super
  32.     @sprite.dispose
  33.     @command_window.dispose
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # * 更新畫面
  37.   #--------------------------------------------------------------------------
  38.   def update
  39.     super
  40.     @command_window.update
  41.     update_command
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ★ 創建標題圖形(通關後自動更換)
  45.   #--------------------------------------------------------------------------
  46.   def create_title_graphic
  47.     @sprite = Sprite.new
  48.     # 判斷是否通關:如果 true_ending.dat 文件存在,就用通關後的標題圖
  49.     if FileTest.exist?("true_ending.dat")
  50.       @sprite.bitmap = Cache.system("Title_True")  # 通關後的標題圖
  51.     else
  52.       @sprite.bitmap = Cache.system("Title")       # 默認標題圖
  53.     end
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # * 創建指令視窗
  57.   #--------------------------------------------------------------------------
  58.   def create_command_window
  59.     s1 = Vocab::new_game
  60.     s2 = Vocab::continue
  61.     s3 = Vocab::shutdown
  62.     @command_window = Window_Command.new(172, [s1, s2, s3])
  63.     @command_window.x = (544 - @command_window.width) / 2
  64.     @command_window.y = 288
  65.     if @continue_enabled
  66.       @command_window.index = 1
  67.     else
  68.       @command_window.draw_item(1, false)
  69.     end
  70.     @command_window.openness = 0
  71.     @command_window.open
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ★ 播放標題音樂(通關後自動更換)
  75.   #--------------------------------------------------------------------------
  76.   def play_title_music
  77.     if FileTest.exist?("true_ending.dat")
  78.       # 通關後的標題音樂(引號裡改音樂文件名,不用加後綴)
  79.       RPG::BGM.new("Title_True", 100, 100).play
  80.     else
  81.       # 默認標題音樂
  82.       $data_system.title_bgm.play
  83.     end
  84.     RPG::BGS.stop
  85.     RPG::ME.stop
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # * 更新指令
  89.   #--------------------------------------------------------------------------
  90.   def update_command
  91.     if Input.trigger?(Input::C)
  92.       case @command_window.index
  93.       when 0
  94.         command_new_game
  95.       when 1
  96.         command_continue
  97.       when 2
  98.         command_shutdown
  99.       end
  100.     end
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # * 確定繼續遊戲的有效性
  104.   #--------------------------------------------------------------------------
  105.   def continue_enabled
  106.     return false unless FileTest.exist?("Save1.rvdata")
  107.     return true
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # * 指令:新遊戲
  111.   #--------------------------------------------------------------------------
  112.   def command_new_game
  113.     Sound.play_decision
  114.     $game_system = Game_System.new
  115.     $game_message = Game_Message.new
  116.     $game_switches = Game_Switches.new
  117.     $game_variables = Game_Variables.new
  118.     $game_self_switches = Game_SelfSwitches.new
  119.     $game_screen = Game_Screen.new
  120.     $game_actors = Game_Actors.new
  121.     $game_party = Game_Party.new
  122.     $game_troop = Game_Troop.new
  123.     $game_map = Game_Map.new
  124.     $game_player = Game_Player.new
  125.     $game_party.setup_starting_members
  126.     $game_map.setup($data_system.start_map_id)
  127.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  128.     $game_player.refresh
  129.     $scene = Scene_Map.new
  130.     RPG::BGM.fade(800)
  131.     RPG::BGS.fade(800)
  132.     RPG::ME.fade(800)
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # * 指令:繼續遊戲
  136.   #--------------------------------------------------------------------------
  137.   def command_continue
  138.     unless continue_enabled
  139.       Sound.play_buzzer
  140.       return
  141.     end
  142.     Sound.play_decision
  143.     $scene = Scene_File.new(false, false, false)
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # * 指令:結束遊戲
  147.   #--------------------------------------------------------------------------
  148.   def command_shutdown
  149.     Sound.play_decision
  150.     $scene = nil
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # * 戰鬥測試
  154.   #--------------------------------------------------------------------------
  155.   def battle_test
  156.     $data_actors        = load_data("Data/Actors.rvdata")
  157.     $data_classes       = load_data("Data/Classes.rvdata")
  158.     $data_skills        = load_data("Data/Skills.rvdata")
  159.     $data_items         = load_data("Data/Items.rvdata")
  160.     $data_weapons       = load_data("Data/Weapons.rvdata")
  161.     $data_armors        = load_data("Data/Armors.rvdata")
  162.     $data_enemies       = load_data("Data/Enemies.rvdata")
  163.     $data_troops        = load_data("Data/Troops.rvdata")
  164.     $data_states        = load_data("Data/States.rvdata")
  165.     $data_animations    = load_data("Data/Animations.rvdata")
  166.     $data_tilesets      = load_data("Data/Tilesets.rvdata")
  167.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  168.     $data_system        = load_data("Data/System.rvdata")
  169.     $game_system = Game_System.new
  170.     $game_message = Game_Message.new
  171.     $game_switches = Game_Switches.new
  172.     $game_variables = Game_Variables.new
  173.     $game_self_switches = Game_SelfSwitches.new
  174.     $game_screen = Game_Screen.new
  175.     $game_actors = Game_Actors.new
  176.     $game_party = Game_Party.new
  177.     $game_troop = Game_Troop.new
  178.     $game_map = Game_Map.new
  179.     $game_player = Game_Player.new
  180.     for i in 0...$data_system.party_members.size
  181.       actor = $game_actors[$data_system.party_members<i>]
  182.       $game_party.add_actor(actor.id)
  183.     end
  184.     $game_party.make_actors_battle_test
  185.     $game_troop.setup($data_system.battle_test_troop_id)
  186.     $game_troop.can_escape = true
  187.     $game_troop.can_lose = true
  188.     $game_temp.battle_proc = Proc.new { $scene = nil }
  189.     $scene = Scene_Battle.new
  190.   end
  191. end
复制代码

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

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

结局事件里加的脚本
在真结局的最后,加一条「脚本」指令(第 3 页→进阶的指令→脚本),输入:
  1. <blockquote>File.open("true_ending.dat", "w") { |f| f.write("1") }
复制代码
这行代码会在游戏目录下创建一个 true_ending.dat 文件,作为通关标记。

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

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

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-25 03:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表