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

Project1

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

[原创发布] 简陋设置菜单(几乎可用于所有游戏)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
跳转到指定楼层
1
发表于 2011-4-3 10:13:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 沙漠点灰 于 2011-4-3 10:14 编辑

这个是支持子选项窗口的一个范例工程

效果图:


确实很简陋...!
(使用前确定有支持子选项的窗口)
使用方法:地图上按下F8 或者调用$scene = Scene_Set.new

脚本如下:
  1. #==============================================================================
  2. #                           简易设置菜单
  3. #              ISA
  4. #                      主要是示范 如何用 Window_Folder
  5. # 把你的大名及信息写到这... \n 表示换行(用的是print 别骂我,我的确很懒...)
  6. Info = "简易设置菜单 + 子选择窗口 -by 沙漠.灰 \n      版本: v0.5 "

  7. # 是否允许修改帧速(true=是  false=否)
  8. RunSpeed = true

  9. #==============================================================================
  10. # ■ Scene_Map
  11. #------------------------------------------------------------------------------
  12. #  处理地图画面的类。
  13. #==============================================================================

  14. class Scene_Map
  15.   alias isa_dust_update update
  16.   def update
  17.     isa_dust_update
  18.     # 按 F8 调出设置菜单
  19.     if Input.trigger?(Input::F8)
  20.       # 不是在事件执行中或菜单禁止中
  21.       unless $game_system.map_interpreter.running? or
  22.              $game_system.menu_disabled
  23.         $scene = Scene_Set.new
  24.       end
  25.     end
  26.   end
  27. end
  28. #==============================================================================
  29. # ■ Scene_Set
  30. #------------------------------------------------------------------------------
  31. #   主要是示范 如何用 Window_Folder
  32. #==============================================================================

  33. class Scene_Set
  34.   #--------------------------------------------------------------------------
  35.   # ● 主处理
  36.   #--------------------------------------------------------------------------
  37.   def main
  38.     @temp=[$game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v]
  39.     @temp_dup = @temp.dup
  40.     @graphics_frame_rate = Graphics.frame_rate
  41.     # 生成活动块
  42.     @spriteset = Spriteset_Map.new
  43.     commands = [["游戏设置","音量设置(按左右键)","游戏加速(退出游戏无效)","版本信息"],"直接退出","保存退出"]
  44.     @folder_window = Window_Folder.new(50,96,370,32*7,commands)
  45.     @folder_window.disable_item([0,2]) unless RunSpeed
  46.     17.times{@folder_window.not_really_move("left ")}
  47.     # 生成窗口
  48.     window 0
  49.     # 执行过渡
  50.     Graphics.transition
  51.     17.times{Graphics.update;@folder_window.not_really_move("right")}
  52.     # 主循环
  53.     loop do
  54.       # 刷新游戏画面
  55.       Graphics.update
  56.       # 刷新输入信息
  57.       Input.update
  58.       # 刷新画面
  59.       update
  60.       # 如果画面被切换的话就中断循环
  61.       if $scene != self
  62.         break
  63.       end
  64.     end
  65.     17.times{Graphics.update;@folder_window.not_really_move("left ")}
  66.     # 准备过渡
  67.     Graphics.freeze
  68.     # 释放窗口
  69.     @spriteset.dispose
  70.     @set_window.dispose
  71.     @folder_window.dispose
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 生成窗口
  75.   #--------------------------------------------------------------------------
  76.   def window(index)
  77.     @set_window_index = index
  78.     if index == 0
  79.       @set_window.dispose if @set_window != nil
  80.       @set_window = Window_Command.new(192, ["BGM","BGS","ME","SE",])
  81.       @set_window.x = 420
  82.       @set_window.y = 96+32
  83.       @set_window.index = -1
  84.       4.times{|i|draw(i,@temp[i])}
  85.       17.times{@set_window.not_really_move("left ")}
  86.       @set_window.visible = @set_window.active = false
  87.     else
  88.       @set_window.dispose if @set_window != nil
  89.       @set_window = Window_Command.new(192, ["帧率"])
  90.       @set_window.x = 420
  91.       @set_window.y = 96+32*2
  92.       @set_window.index = -1
  93.       draw(0,Graphics.frame_rate)
  94.       17.times{@set_window.not_really_move("left ")}
  95.       @set_window.visible = @set_window.active = false
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 描绘 数字
  100.   #--------------------------------------------------------------------------
  101.   def draw(index,val)
  102.     rect = Rect.new(4+32*2, 32 * index, @set_window.contents.width - 82, 32)
  103.     @set_window.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  104.     @set_window.contents.draw_text(rect, val.to_s,2)
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 刷新画面
  108.   #--------------------------------------------------------------------------
  109.   def update
  110.     @set_window.update
  111.     @folder_window.update
  112.     if @folder_window.active
  113.       # C键被按下的情况下,并且@folder_window不是在移动
  114.       if Input.trigger?(Input::C) and @folder_window.c
  115.         if @folder_window.index == [0,2] && !RunSpeed
  116.           # 演奏冻结 SE
  117.           $game_system.se_play($data_system.buzzer_se)
  118.           return
  119.         else
  120.           # 演奏确定 SE
  121.           $game_system.se_play($data_system.decision_se)
  122.         end
  123.         case @folder_window.index[0]
  124.         when 0 # 游戏设置
  125.           case @folder_window.index[1]
  126.           when 1 # 音量设置
  127.             @folder_window.active = false
  128.             @set_window.active = @set_window.visible = true
  129.             17.times{Graphics.update;@set_window.not_really_move("right")}
  130.             @set_window.index = 0
  131.           when 2 # 游戏加速
  132.             window 1
  133.             @folder_window.active = false
  134.             @set_window.active = @set_window.visible = true
  135.             17.times{Graphics.update;@set_window.not_really_move("right")}
  136.             @set_window.index = 0
  137.           when 3 # 版本信息
  138.             print Info
  139.             return
  140.           end
  141.         when 2 # 保存&退出
  142.           $scene = Scene_Map.new
  143.         when 1 # 直接退出
  144.           Graphics.frame_rate = @graphics_frame_rate
  145.           $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp_dup
  146.           $game_system.bgm_play($game_system.playing_bgm)
  147.           $scene = Scene_Map.new
  148.         end
  149.       end
  150.     elsif @set_window.active
  151.       if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  152.         # 演奏确定 SE
  153.         $game_system.se_play($data_system.decision_se)
  154.         @folder_window.active = true
  155.         @set_window.index = -1
  156.         17.times{Graphics.update;@set_window.not_really_move("left ")}
  157.         @set_window.active = @set_window.visible = false
  158.         window 0
  159.       end
  160.       if Input.repeat?(Input::LEFT)
  161.         if @set_window_index == 0
  162.           @temp[@set_window.index] = [@temp[@set_window.index]-1,0].max
  163.           draw(@set_window.index,@temp[@set_window.index])
  164.           $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp
  165.           $game_system.se_play($data_system.cursor_se)
  166.           $game_system.bgm_play($game_system.playing_bgm)
  167.         else
  168.           draw(0,Graphics.frame_rate -= 1)
  169.           $game_system.se_play($data_system.cursor_se)
  170.         end
  171.       end
  172.       if Input.repeat?(Input::RIGHT)
  173.         if @set_window_index == 0
  174.           @temp[@set_window.index] = [@temp[@set_window.index]+1,100].min
  175.           draw(@set_window.index,@temp[@set_window.index])
  176.           $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp
  177.           $game_system.se_play($data_system.cursor_se)
  178.           $game_system.bgm_play($game_system.playing_bgm)
  179.         else
  180.           draw(0,Graphics.frame_rate += 1)
  181.         end
  182.       end
  183.     end # of @folder_window.active
  184.   end # of def update
  185. end # of class
  186. #==============================================================================
  187. # ■ Window_Base
  188. #------------------------------------------------------------------------------
  189. #  游戏中全部窗口的超级类。
  190. #==============================================================================

  191. class Window_Base < Window
  192.   #--------------------------------------------------------------------------
  193.   # ● 初始化
  194.   #--------------------------------------------------------------------------
  195.   alias isa_dust_initialize initialize
  196.   def initialize(*a)
  197.     isa_dust_initialize(*a)
  198.     @move_count = 0
  199.     @move_to_x  = 0
  200.     @move_to_y  = 0
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 伪 移动
  204.   #--------------------------------------------------------------------------
  205.   def not_really_move(d="right")
  206.     d == "right" ? d = 1 : d = -1
  207.     self.x        += d * 5
  208.     self.ox       += d * 5
  209.     self.width    -= d * 5
  210.     self.opacity  += d * 15
  211.     self.contents_opacity += d * 15
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 真 移动
  215.   #--------------------------------------------------------------------------
  216.   def move_to(x,y,count)
  217.     @move_to_x = x
  218.     @move_to_y = y
  219.     @move_count= count
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 刷新
  223.   #--------------------------------------------------------------------------
  224.   alias isa_dust_update update
  225.   def update
  226.     isa_dust_update
  227.     # 移动完毕时,直接返回
  228.     return if @move_count <= 0
  229.     self.x += (@move_to_x - self.x)/@move_count.to_f
  230.     self.y += (@move_to_y - self.y)/@move_count.to_f
  231.     @move_count -= 1
  232.   end
  233. end
  234. #==============================================================================
  235. # ■ Game_System
  236. #------------------------------------------------------------------------------
  237. #  处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考
  238. # $game_system 。
  239. #==============================================================================

  240. class Game_System
  241.   #--------------------------------------------------------------------------
  242.   # ● 定义实例变量
  243.   #--------------------------------------------------------------------------
  244.   attr_accessor :bgm_v
  245.   attr_accessor :bgs_v
  246.   attr_accessor :me_v
  247.   attr_accessor :se_v
  248.   alias isa_dust_initialize initialize
  249.   #--------------------------------------------------------------------------
  250.   # ● 初始化对像
  251.   #--------------------------------------------------------------------------
  252.   def initialize
  253.     isa_dust_initialize
  254.     @bgm_v = 80
  255.     @bgs_v = 80
  256.     @me_v  = 80
  257.     @se_v  = 80
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 演奏 BGM
  261.   #     bgm : 演奏的 BGM
  262.   #--------------------------------------------------------------------------
  263.   def bgm_play(bgm)
  264.     @playing_bgm = bgm
  265.     if bgm != nil and bgm.name != ""
  266.       Audio.bgm_play("Audio/BGM/" + bgm.name, @bgm_v, bgm.pitch)
  267.     else
  268.       Audio.bgm_stop
  269.     end
  270.     Graphics.frame_reset
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 演奏 BGS
  274.   #     bgs : 演奏的 BGS
  275.   #--------------------------------------------------------------------------
  276.   def bgs_play(bgs)
  277.     @playing_bgs = bgs
  278.     if bgs != nil and bgs.name != ""
  279.       Audio.bgs_play("Audio/BGS/" + bgs.name, @bgs_v, bgs.pitch)
  280.     else
  281.       Audio.bgs_stop
  282.     end
  283.     Graphics.frame_reset
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● ME 的演奏
  287.   #     me : 演奏的 ME
  288.   #--------------------------------------------------------------------------
  289.   def me_play(me)
  290.     if me != nil and me.name != ""
  291.       Audio.me_play("Audio/ME/" + me.name, @me_v, me.pitch)
  292.     else
  293.       Audio.me_stop
  294.     end
  295.     Graphics.frame_reset
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● SE 的演奏
  299.   #     se : 演奏的 SE
  300.   #--------------------------------------------------------------------------
  301.   def se_play(se)
  302.     if se != nil and se.name != ""
  303.       Audio.se_play("Audio/SE/" + se.name, @se_v, se.pitch)
  304.     end
  305.   end
  306. end
复制代码
附:范例工程
简易设置菜单.rar (198.22 KB, 下载次数: 1208)
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
98 小时
注册时间
2011-3-20
帖子
243
2
发表于 2011-4-3 14:06:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
3
 楼主| 发表于 2011-4-3 14:13:32 | 只看该作者
回复 3202972 的帖子

一般地(数学书上看多了),若是场景类,XP是:
Scene_Xxxx
def main
XXX
end
def XX
end
end
而Vx是
Scene_Xxxx < Scene_Base
def start
end
ded xxx
end
end

用于Vx?没试过,理论肯定是兼容
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
98 小时
注册时间
2011-3-20
帖子
243
4
发表于 2011-4-3 14:23:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2011-3-19
帖子
77
5
发表于 2011-4-12 21:08:01 | 只看该作者
补充一点……如果有其他的脚本需要配合下载……请说明……否则我吧你告上消协(浪费我家电费啊……)


wabbyzw于2011-4-12 21:11补充以下内容:
■Window_Folder脚本在13行有错误哦……


wabbyzw于2011-4-12 21:24补充以下内容:
额……电脑的淡出错误,麻烦了,SORRY……

点评

13行错误?!是class XXX 晕,不可能错误! 请下载范例!  发表于 2011-4-13 17:51
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2010-6-18
帖子
5
6
发表于 2011-4-24 09:37:56 | 只看该作者
主选项不支持鼠标脚本的说{:nm_3:}

点评

可以发个鼠标版的,不过没时间,鼠标版的在构思的时候就想到过  发表于 2011-4-24 15:06
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39592
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

7
发表于 2011-5-25 02:43:37 | 只看该作者


楼主,306行有问题! 我的游戏被攻垮了……

点评

306 #--------------------------------------------------------------------------  发表于 2011-5-25 18:14
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv1.梦旅人

井蓝

梦石
0
星屑
58
在线时间
351 小时
注册时间
2011-1-14
帖子
277
8
发表于 2011-5-25 13:32:30 | 只看该作者
对音量控制比较感兴趣。。。。。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39592
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

9
发表于 2011-5-26 21:31:00 | 只看该作者
KB.Driver 发表于 2011-5-25 02:43
楼主,306行有问题!       我的游戏被 ...

:)哦,谢谢你的及时修正。
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 18:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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