简陋设置菜单(几乎可用于所有游戏)
这个是支持子选项窗口的一个范例工程效果图:
确实很简陋...!
(使用前确定有支持子选项的窗口)
使用方法:地图上按下F8 或者调用$scene = Scene_Set.new
脚本如下:#==============================================================================# 简易设置菜单# ISA# 主要是示范 如何用 Window_Folder# 把你的大名及信息写到这... \n 表示换行(用的是print 别骂我,我的确很懒...)Info = "简易设置菜单 + 子选择窗口 -by 沙漠.灰 \n 版本: v0.5 "# 是否允许修改帧速(true=是false=否)RunSpeed = true#==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------# 处理地图画面的类。#==============================================================================class Scene_Mapalias isa_dust_update updatedef update isa_dust_update # 按 F8 调出设置菜单 if Input.trigger?(Input::F8) # 不是在事件执行中或菜单禁止中 unless $game_system.map_interpreter.running? or $game_system.menu_disabled $scene = Scene_Set.new end endendend#==============================================================================# ■ Scene_Set#------------------------------------------------------------------------------# 主要是示范 如何用 Window_Folder#==============================================================================class Scene_Set#--------------------------------------------------------------------------# ● 主处理#--------------------------------------------------------------------------def main @temp=[$game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v] @temp_dup = @temp.dup @graphics_frame_rate = Graphics.frame_rate # 生成活动块 @spriteset = Spriteset_Map.new commands = [["游戏设置","音量设置(按左右键)","游戏加速(退出游戏无效)","版本信息"],"直接退出","保存退出"] @folder_window = Window_Folder.new(50,96,370,32*7,commands) @folder_window.disable_item() unless RunSpeed 17.times{@folder_window.not_really_move("left ")} # 生成窗口 window 0 # 执行过渡 Graphics.transition 17.times{Graphics.update;@folder_window.not_really_move("right")} # 主循环 loop do # 刷新游戏画面 Graphics.update # 刷新输入信息 Input.update # 刷新画面 update # 如果画面被切换的话就中断循环 if $scene != self break end end 17.times{Graphics.update;@folder_window.not_really_move("left ")} # 准备过渡 Graphics.freeze # 释放窗口 @spriteset.dispose @set_window.dispose @folder_window.disposeend#--------------------------------------------------------------------------# ● 生成窗口#--------------------------------------------------------------------------def window(index) @set_window_index = index if index == 0 @set_window.dispose if @set_window != nil @set_window = Window_Command.new(192, ["BGM","BGS","ME","SE",]) @set_window.x = 420 @set_window.y = 96+32 @set_window.index = -1 4.times{|i|draw(i,@temp)} 17.times{@set_window.not_really_move("left ")} @set_window.visible = @set_window.active = false else @set_window.dispose if @set_window != nil @set_window = Window_Command.new(192, ["帧率"]) @set_window.x = 420 @set_window.y = 96+32*2 @set_window.index = -1 draw(0,Graphics.frame_rate) 17.times{@set_window.not_really_move("left ")} @set_window.visible = @set_window.active = false endend#--------------------------------------------------------------------------# ● 描绘 数字#--------------------------------------------------------------------------def draw(index,val) rect = Rect.new(4+32*2, 32 * index, @set_window.contents.width - 82, 32) @set_window.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) @set_window.contents.draw_text(rect, val.to_s,2)end#--------------------------------------------------------------------------# ● 刷新画面#--------------------------------------------------------------------------def update @set_window.update @folder_window.update if @folder_window.active # C键被按下的情况下,并且@folder_window不是在移动 if Input.trigger?(Input::C) and @folder_window.c if @folder_window.index == && !RunSpeed # 演奏冻结 SE $game_system.se_play($data_system.buzzer_se) return else # 演奏确定 SE $game_system.se_play($data_system.decision_se) end case @folder_window.index when 0 # 游戏设置 case @folder_window.index when 1 # 音量设置 @folder_window.active = false @set_window.active = @set_window.visible = true 17.times{Graphics.update;@set_window.not_really_move("right")} @set_window.index = 0 when 2 # 游戏加速 window 1 @folder_window.active = false @set_window.active = @set_window.visible = true 17.times{Graphics.update;@set_window.not_really_move("right")} @set_window.index = 0 when 3 # 版本信息 print Info return end when 2 # 保存&退出 $scene = Scene_Map.new when 1 # 直接退出 Graphics.frame_rate = @graphics_frame_rate $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp_dup $game_system.bgm_play($game_system.playing_bgm) $scene = Scene_Map.new end end elsif @set_window.active if Input.trigger?(Input::B) or Input.trigger?(Input::C) # 演奏确定 SE $game_system.se_play($data_system.decision_se) @folder_window.active = true @set_window.index = -1 17.times{Graphics.update;@set_window.not_really_move("left ")} @set_window.active = @set_window.visible = false window 0 end if Input.repeat?(Input::LEFT) if @set_window_index == 0 @temp[@set_window.index] = [@temp[@set_window.index]-1,0].max draw(@set_window.index,@temp[@set_window.index]) $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp $game_system.se_play($data_system.cursor_se) $game_system.bgm_play($game_system.playing_bgm) else draw(0,Graphics.frame_rate -= 1) $game_system.se_play($data_system.cursor_se) end end if Input.repeat?(Input::RIGHT) if @set_window_index == 0 @temp[@set_window.index] = [@temp[@set_window.index]+1,100].min draw(@set_window.index,@temp[@set_window.index]) $game_system.bgm_v,$game_system.bgs_v,$game_system.me_v,$game_system.se_v=@temp $game_system.se_play($data_system.cursor_se) $game_system.bgm_play($game_system.playing_bgm) else draw(0,Graphics.frame_rate += 1) end end end # of @folder_window.activeend # of def updateend # of class#==============================================================================# ■ Window_Base#------------------------------------------------------------------------------# 游戏中全部窗口的超级类。#==============================================================================class Window_Base < Window#--------------------------------------------------------------------------# ● 初始化#--------------------------------------------------------------------------alias isa_dust_initialize initializedef initialize(*a) isa_dust_initialize(*a) @move_count = 0 @move_to_x= 0 @move_to_y= 0end#--------------------------------------------------------------------------# ● 伪 移动#--------------------------------------------------------------------------def not_really_move(d="right") d == "right" ? d = 1 : d = -1 self.x += d * 5 self.ox += d * 5 self.width -= d * 5 self.opacity+= d * 15 self.contents_opacity += d * 15end#--------------------------------------------------------------------------# ● 真 移动#--------------------------------------------------------------------------def move_to(x,y,count) @move_to_x = x @move_to_y = y @move_count= countend#--------------------------------------------------------------------------# ● 刷新#--------------------------------------------------------------------------alias isa_dust_update updatedef update isa_dust_update # 移动完毕时,直接返回 return if @move_count
页:
[1]