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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
197 小时
注册时间
2011-6-10
帖子
231
跳转到指定楼层
1
发表于 2013-10-24 02:25:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这个脚本会变动音乐和音效音量,加上窗口还是全屏的选项。

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

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

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


效果:







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



这个设定脚本很基础,所以基本上还是新手用的可能性比较高……
所以……嗯,后天开始整合新手向简洁菜单以及继续调整游。

评分

参与人数 2星屑 +355 收起 理由
怪蜀黍 + 335 奖励条例!
存档不能 + 20 精品文章

查看全部评分

特点:懒
特性:懒
爱好:潜水

《巴雅前奏曲》目前已完成,正在挖学美工……
新坑:目前正制作中0 0

Lv2.观梦者

梦石
0
星屑
855
在线时间
198 小时
注册时间
2013-1-28
帖子
565
2
发表于 2013-10-24 07:10:20 | 只看该作者
抱走了~ 謝謝分享
マトコ:「ZE☆」
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
185 小时
注册时间
2013-7-22
帖子
93
3
发表于 2013-11-3 10:59:04 | 只看该作者
脚本错误?还是我弄错了?

错误.png (3.55 KB, 下载次数: 29)

错误.png

点评

哦  发表于 2013-11-3 18:12
[url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new 把[]括号里的删掉……弄代码的时候不知道为什么出现的url  发表于 2013-11-3 16:19
[url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new 把[]括号里的删掉……弄代码的时候不知道为什么出现的url  发表于 2013-11-3 16:18
[
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 22:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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