查看: 61|回复: 0

[转载发布] 基础的游戏设定菜单脚本(新手向)

[复制链接]
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月四日(秋) | 显示全部楼层 |阅读模式
    这个脚本会变动音乐和音效音量,加上窗口还是全屏的选项。

    依然是很久以前做的嗯……不知道是不是火星。

    整体的思想+基础来自于月光奏鸣曲。

    脚本直接加在main之前就行,默认添加选项的是标题画面,当然会脚本的就可以加在菜单里了。


    效果:







    RUBY 代码
    1. #========================================
    2. #标题添加设定脚本v.1.0
    3. #脚本的想法来自于月光奏鸣曲
    4. #作者为Elamed,使用时请保留以上信息。
    5. #========================================
    6. class Game_System
    7.   attr_accessor :bgm_volume
    8.   attr_accessor :se_volume
    9.   attr_accessor :moniter_mode
    10.   def initialize
    11.     @bgm_volume = 80
    12.     @se_volume = 80
    13.     @moniter_mode = 0
    14.   end
    15.   def bgm_play(bgm)
    16.     @playing_bgm = bgm
    17.     if bgm != niland bgm.name != ""
    18.       Audio.bgm_play("Audio/BGM/" + bgm.name, @bgm_volume, bgm.pitch)
    19.     else
    20.       Audio.bgm_stop
    21.     end
    22.     Graphics.frame_reset
    23.   end
    24.   def bgs_play(bgs)
    25.     @playing_bgs = bgs
    26.     if bgs != niland bgs.name != ""
    27.       Audio.bgs_play("Audio/BGS/" + bgs.name, @bgm.volume, bgs.pitch)
    28.     else
    29.       Audio.bgs_stop
    30.     end
    31.     Graphics.frame_reset
    32.   end
    33.     def me_play(me)
    34.     if me != niland me.name != ""
    35.       Audio.me_play("Audio/ME/" + me.name, @se.volume, me.pitch)
    36.     else
    37.       Audio.me_stop
    38.     end
    39.     Graphics.frame_reset
    40.   end
    41.   def se_play(se)
    42.     if se != niland se.name != ""
    43.       Audio.se_play("Audio/SE/" + se.name, @se_volume, se.pitch)
    44.     end
    45.   end
    46. end
    47. class Scene_Title
    48.   def main
    49.         if$BTEST
    50.       battle_test
    51.       return
    52.     end
    53.     $data_actors        = load_data("Data/Actors.rxdata")
    54.     $data_classes       = load_data("Data/Classes.rxdata")
    55.     $data_skills        = load_data("Data/Skills.rxdata")
    56.     $data_items         = load_data("Data/Items.rxdata")
    57.     $data_weapons       = load_data("Data/Weapons.rxdata")
    58.     $data_armors        = load_data("Data/Armors.rxdata")
    59.     $data_enemies       = load_data("Data/Enemies.rxdata")
    60.     $data_troops        = load_data("Data/Troops.rxdata")
    61.     $data_states        = load_data("Data/States.rxdata")
    62.     $data_animations    = load_data("Data/Animations.rxdata")
    63.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
    64.     $data_common_events = load_data("Data/CommonEvents.rxdata")
    65.     $data_system        = load_data("Data/System.rxdata")
    66.     $game_system = Game_System.new
    67.     ifFileTest.exist?("SettingData.rxdata")
    68.       file = File.open("SettingData.rxdata", "r")
    69.       $data_system_set    = load_data("SettingData.rxdata")
    70.       $game_system  = Marshal.load(file)
    71.       file.close
    72.     else
    73.       file = File.open("SettingData.rxdata", "w")
    74.       Marshal.dump($game_system, file)
    75.       file.close
    76.     end
    77.     if$game_system.moniter_mode == 1
    78.       unless$keybd
    79.       $keybd = Win32API.new'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
    80.       $keybd.call 0xA4, 0, 0, 0
    81.       $keybd.call13, 0, 0, 0
    82.       $keybd.call13, 0, 2, 0
    83.       $keybd.call 0xA4, 0, 2, 0
    84.     end
    85.   end
    86.     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new
    87.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    88.     # 生成命令窗口
    89.     s1 = "新游戏"
    90.     s2 = "读取"
    91.     s3 = "设定"
    92.     s4 = "退出"
    93.     @command_window = Window_Command.new(200, [s1, s2, s3, s4])
    94.     @command_window.x = 400
    95.     @command_window.y = 205
    96.     # 判定继续的有效性
    97.     # 存档文件一个也不存在的时候也调查
    98.     # 有効为 @continue_enabled 为 true、無効为 false
    99.     @continue_enabled = false
    100.     for i in0..3
    101.       ifFileTest.exist?("Save#{i+1}.rxdata")
    102.         @continue_enabled = true
    103.       end
    104.     end
    105.     if@continue_enabled
    106.       @command_window.index = 1
    107.     end
    108.     # 演奏标题 BGM
    109.     $game_system.bgm_play($data_system.title_bgm)
    110.     # 停止演奏 ME、BGS
    111.     Audio.me_stop
    112.     Audio.bgs_stop
    113.     # 执行过渡
    114.     Graphics.transition
    115.     # 主循环
    116.     loopdo
    117.       # 刷新游戏画面
    118.       Graphics.update
    119.       # 刷新输入信息
    120.       Input.update
    121.       # 刷新画面
    122.       update
    123.       # 如果画面被切换就中断循环
    124.       if$scene != self
    125.         break
    126.       end
    127.     end
    128.     # 装备过渡
    129.     Graphics.freeze
    130.     # 释放命令窗口
    131.     @command_window.dispose
    132.     # 释放标题图形
    133.     @sprite.bitmap.dispose
    134.     @sprite.dispose
    135.   end
    136.   #--------------------------------------------------------------------------
    137.   # ● 刷新画面
    138.   #--------------------------------------------------------------------------
    139.   def update
    140.     # 刷新命令窗口
    141.     @command_window.update
    142.     # 按下 C 键的情况下
    143.     if Input.trigger?(Input::C)
    144.       # 命令窗口的光标位置的分支
    145.       case@command_window.index
    146.       when0  # 新游戏
    147.         command_new_game
    148.       when1  # 继续
    149.         command_continue
    150.       when2
    151.         command_option
    152.       when3  # 退出
    153.         command_shutdown
    154.       end
    155.     end
    156.   end
    157.   def command_option
    158.     $game_system.se_play($data_system.decision_se)
    159.     $scene = Scene_Option.new
    160.   end
    161. end
    162. class Window_System < Window_Selectable
    163.     def initialize
    164.     super(160, 100, 300, 32 * 4)
    165.     @settings = $game_system
    166.     @item_max = 3
    167.     self.contents = Bitmap.new(width - 32, @item_max * 32)
    168.     refresh
    169.     self.index = 0
    170.   end
    171.   def refresh(bgm_volume = @settings.bgm_volume, se_volume = @settings.se_volume, moniter_mode = @settings.moniter_mode)
    172.     self.contents.clear
    173.     self.contents.font.size = 16
    174.     @settings.bgm_volume = bgm_volume
    175.     @settings.se_volume = se_volume
    176.     @settings.moniter_mode = moniter_mode
    177.     rect = Rect.new(4, 32 * 0, self.contents.width - 8, 32)
    178.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    179.     text = "BGM:   "
    180.     blocknum = @settings.bgm_volume / 10
    181.     for i in2..blocknum
    182.       case i
    183.       when2
    184.         text = text + "  "
    185.       when3
    186.         text = text + "▁"# 30
    187.       when4
    188.         text = text + "▂"# 40
    189.       when5
    190.         text = text + "▃"# 50
    191.       when6
    192.         text = text + "▄"# 60
    193.       when7
    194.         text = text + "▅"# 70
    195.       when8
    196.         text = text + "▆"# 80
    197.       when9
    198.         text = text + "▇"# 90
    199.       when10
    200.         text = text + "█"# 100
    201.       end   
    202.     end
    203.     self.contents.draw_text(rect, text)
    204.     rect = Rect.new(4, 32 * 1, self.contents.width - 8, 32)
    205.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    206.     blocknum = @settings.se_volume / 10
    207.     text = "SE:    "
    208.     for i in2..blocknum
    209.       case i
    210.       when2
    211.         text = text + "  "
    212.       when3
    213.         text = text + "▁"# 30
    214.       when4
    215.         text = text + "▂"# 40
    216.       when5
    217.         text = text + "▃"# 50
    218.       when6
    219.         text = text + "▄"# 60
    220.       when7
    221.         text = text + "▅"# 70
    222.       when8
    223.         text = text + "▆"# 80
    224.       when9
    225.         text = text + "▇"# 90
    226.       when10
    227.         text = text + "█"# 100
    228.       end   
    229.     end
    230.     self.contents.draw_text(rect, text)
    231.     rect = Rect.new(4, 32 * 2, self.contents.width - 8, 32)
    232.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))   
    233.     text = "模式(需要重新启动游戏):"
    234.     case@settings.moniter_mode
    235.     when0
    236.       text = text + " 窗口"
    237.     when1
    238.       text = text + " 全屏"
    239.     end
    240.     self.contents.draw_text(rect, text)
    241.   end
    242. end
    243. class Scene_Option
    244.     def initialize
    245.       @bgm_volume = $game_system.bgm_volume
    246.       @se_volume = $game_system.se_volume
    247.       @moniter_mode = $game_system.moniter_mode
    248.     end
    249.     def main
    250.     @sprite = Sprite.new
    251.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    252.     @sprite.opacity = 180
    253.     @system_window = Window_System.new
    254.     @system_window.opacity = 180
    255.     # 执行过渡
    256.     Graphics.transition
    257.     # 主循环
    258.     loopdo
    259.       # 刷新游戏画面
    260.       Graphics.update
    261.       # 刷新输入信息
    262.       Input.update
    263.       # 刷新画面
    264.       update
    265.       # 如果画面切换的话就中断循环
    266.       if$scene != self
    267.         break
    268.       end
    269.     end
    270.     # 准备过渡
    271.     Graphics.freeze
    272.     # 释放窗口
    273.     @system_window.dispose
    274.     @sprite.dispose
    275.   end
    276.   def update
    277.     @system_window.update
    278.     @sprite.update
    279.     # 按下 B 键的情况下
    280.     if Input.trigger?(Input::B)
    281.       $game_system.se_play($data_system.decision_se)
    282.       $game_system.bgm_volume = @bgm_volume
    283.       $game_system.se_volume = @se_volume
    284.       $game_system.moniter_mode = @moniter_mode
    285.       file = File.open("SettingData.rxdata", "w")
    286.       Marshal.dump($game_system, file)
    287.       file.close      
    288.       # 切换到菜单画面
    289.       $scene = Scene_Title.new
    290.       return
    291.     end
    292.     if Input.trigger?(Input::RIGHT)
    293.       if@system_window.index == 0
    294.         if@bgm_volume < 100
    295.           $game_system.se_play($data_system.cursor_se)
    296.          @bgm_volume = @bgm_volume + 10
    297.              $game_system.bgm_play($data_system.title_bgm)
    298.         @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    299.        else
    300.          $game_system.se_play($data_system.cancel_se)
    301.         @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    302.        end      
    303.       elsif@system_window.index == 1
    304.         if@se_volume < 100
    305.           $game_system.se_play($data_system.cursor_se)
    306.          @se_volume = @se_volume + 10
    307.         @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    308.        else
    309.          $game_system.se_play($data_system.cancel_se)
    310.         @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    311.        end
    312.      elsif@system_window.index == 2
    313.        if@moniter_mode == 0
    314.          $game_system.se_play($data_system.decision_se)
    315.          @moniter_mode = 1
    316.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    317.        else
    318.          $game_system.se_play($data_system.decision_se)
    319.          @moniter_mode = 0
    320.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    321.        end
    322.      end
    323.     return
    324.   end
    325.       if Input.trigger?(Input::LEFT)
    326.       if@system_window.index == 0
    327.         if@bgm_volume > 20
    328.           $game_system.se_play($data_system.cursor_se)
    329.          @bgm_volume = @bgm_volume - 10
    330.              $game_system.bgm_play($data_system.title_bgm)
    331.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    332.        else
    333.          $game_system.se_play($data_system.cancel_se)
    334.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    335.        end      
    336.       elsif@system_window.index == 1
    337.         if@se_volume > 20
    338.           $game_system.se_play($data_system.cursor_se)
    339.          @se_volume = @se_volume - 10
    340.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    341.        else
    342.          $game_system.se_play($data_system.cancel_se)
    343.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    344.        end
    345.      elsif@system_window.index == 2
    346.        if@moniter_mode == 0
    347.          $game_system.se_play($data_system.decision_se)
    348.          @moniter_mode = 1
    349.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    350.        else
    351.          $game_system.se_play($data_system.decision_se)
    352.          @moniter_mode = 0
    353.          @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    354.        end
    355.      end
    356.     return
    357.   end
    358.     @system_window.refresh(@bgm_volume, @se_volume, @moniter_mode)
    359.   end
    360. end
    复制代码



    这个设定脚本很基础,所以基本上还是新手用的可能性比较高……
    所以……嗯,后天开始整合新手向简洁菜单以及继续调整游。
                 本帖来自P1论坛作者艾拉梅德,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=336751  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-5-17 17:02 , Processed in 0.065054 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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