扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 53|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    2636

    主题

    861

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    19041
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    22568

    灌水之王

    发表于 9 小时前 | 显示全部楼层 |阅读模式
    实现效果
    玩家打出真结局后,以后每次打开游戏,标题画面都会自动换成通关后的特殊标题图(跨存档,删了存档也还在)。

    准备工作
    先准备好两张标题背景图,都放到 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, [s1, s2, s3])
        @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 行左右)
    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. 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在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-6-23 19:29 , Processed in 0.089528 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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