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

Project1

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

[已经解决] 如何整合出一个选项

[复制链接]

Lv1.梦旅人

梦石
0
星屑
138
在线时间
304 小时
注册时间
2014-4-11
帖子
419
跳转到指定楼层
1
发表于 2015-1-13 11:19:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
按esc进入menu之后
想要把读档 存档 退出游戏 整合成一个系统选项
点系统之后 在原来显示状态的地方出现3个小的选项 即读档 存档 退出游戏

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1089 小时
注册时间
2014-5-9
帖子
504
2
发表于 2015-1-13 11:32:25 | 只看该作者
  1. =begin
  2. ===============================================================================
  3.   菜单中的系统指令合并 By喵呜喵5
  4. ===============================================================================

  5.   【说明】
  6.   
  7.   将存档、读档、结束游戏这三个指令合并到了同一个界面

  8. =end
  9. $m5script = {} if $m5script.nil?
  10. $m5script["M5Menu20140222"] = true
  11. module M5Menu20140222
  12. #==============================================================================
  13. #  设定部分
  14. #==============================================================================
  15.   
  16.   VOCAB1 = "系统"
  17.   
  18.   #菜单中该界面的指令名称
  19.   
  20.   VOCAB2 = "读取记录"
  21.   
  22.   #该界面中读取存档的指令名称
  23.   
  24.   SAVE = true
  25.   
  26.   #显示存档指令
  27.   
  28.   LOAD = true
  29.   
  30.   #显示读档指令
  31.   
  32. #==============================================================================
  33. #  设定结束
  34. #==============================================================================  
  35. end
  36. class Window_MenuCommand
  37.   def add_save_command   
  38.   end
  39.   alias m5_20140617_add_game_end_command add_game_end_command
  40.   def add_game_end_command
  41.     return m5_20140617_add_game_end_command if $m5script["M5MenuCommand"]
  42.     add_command(M5Menu20140222::VOCAB1, :game_end)
  43.   end
  44. end
  45. class Window_GameEnd
  46.   alias m5_20140222_make_command_list make_command_list
  47.   def make_command_list
  48.     add_command(Vocab::save, :m5_save, save_enabled) if M5Menu20140222::SAVE
  49.     add_command(M5Menu20140222::VOCAB2, :m5_load) if M5Menu20140222::LOAD
  50.     m5_20140222_make_command_list
  51.   end
  52.   def save_enabled
  53.     !$game_system.save_disabled
  54.   end
  55. end
  56. class Scene_End
  57.   alias m5_20140222_create_command_window create_command_window
  58.   def create_command_window
  59.     m5_20140222_create_command_window   
  60.     @command_window.set_handler(:m5_save, method(:command_to_m5save))
  61.     @command_window.set_handler(:m5_load, method(:command_to_m5load))   
  62.   end
  63.   def command_to_m5load
  64.     SceneManager.call(Scene_Load)
  65.   end
  66.   def command_to_m5save
  67.     SceneManager.call(Scene_Save)
  68.   end
  69. end
复制代码

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

已填坑作品:唤灵师1,唤灵师2-魔灵大陆,唤灵师3-莉娜丝的吊坠。破晓,傲歌。
填坑中作品:三国梦,罗亚大陆之雇佣兵团
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22948
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
3
发表于 2015-1-13 12:01:29 | 只看该作者
http://woodpenguin.web.fc2.com/rgss3/sub_menu.html
オリジナルサブメニュー
可在menu加入任意指令指定執行公共事件
例:List = [["コンフィング", 1, 2],]
加入指令コンフィング,撰擇コンフィング後執行公共事件1>執行公共事件2

可加入多個不同指令
  1. =begin

  2. ▼ オリジナルサブメニュー ver. 1.0

  3. RPGツクールVXAce用スクリプト

  4. 制作 : 木星ペンギン
  5. URL  : http://woodpenguin.blog.fc2.com/

  6. ------------------------------------------------------------------------------
  7. 概要

  8. □ コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。

  9. ------------------------------------------------------------------------------
  10. 備考

  11.   □ コマンドは【並び替え】の下に追加されます。
  12.   
  13.   □ サブメニューの処理はイベントコマンドで実行されます。
  14.    ・メインのコモンイベントの処理が終了した時点で、前の画面に戻ります。
  15.    ・サブのコモンイベントは処理が終了しても最初から繰り返しません。
  16.   
  17.   □ イベントの移動などを実行した場合、新しくメニュー画面用のイベントが
  18.      生成されます。
  19.    ・座標 X:0 Y:0 にグラフィックを設定していない状態で生成されます。
  20.   
  21.   □ スクリプトコマンドで SceneManager.goto(Scene_Map) と実行すれば
  22.      マップ画面まで戻ることが出来ます。
  23.   
  24. =end
  25. module WdTk
  26. module SubMenu
  27.   #--------------------------------------------------------------------------
  28.   # ● 追加する項目の設定
  29.   #     配列にコマンド名、実行するコモンイベントID、
  30.   #   並列処理を行うコモンイベントIDの順に設定する。
  31.   #--------------------------------------------------------------------------
  32.   List = [["コンフィング", 1, 2],
  33.           ]
  34.   
  35.   
  36. #//////////////////////////////////////////////////////////////////////////////
  37. #
  38. # 以降、変更する必要なし
  39. #
  40. #//////////////////////////////////////////////////////////////////////////////
  41. end

  42.   @material ||= []
  43.   @material << :SubMenu
  44.   def self.include?(sym)
  45.     @material.include?(sym)
  46.   end
  47. end

  48. #==============================================================================
  49. # ■ Game_SubMenu_Character
  50. #==============================================================================
  51. class Game_SubMenu_Character < Game_Character
  52.   #--------------------------------------------------------------------------
  53.   # ● 通行可能判定
  54.   #--------------------------------------------------------------------------
  55.   def passable?(*)
  56.     return true
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 斜めの通行可能判定
  60.   #--------------------------------------------------------------------------
  61.   def diagonal_passable?(*)
  62.     return true
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 指定位置に移動
  66.   #--------------------------------------------------------------------------
  67.   def moveto(x, y)
  68.     @x = x
  69.     @y = y
  70.     @real_x = @x
  71.     @real_y = @y
  72.     @prelock_direction = 0
  73.     straighten
  74.     update_bush_depth
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 画面 X 座標の取得
  78.   #--------------------------------------------------------------------------
  79.   def screen_x
  80.     @real_x * 32 + 16
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 画面 Y 座標の取得
  84.   #--------------------------------------------------------------------------
  85.   def screen_y
  86.     @real_y * 32 + 32 - shift_y - jump_height
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● ジャンプ時の更新
  90.   #--------------------------------------------------------------------------
  91.   def update_jump
  92.     @jump_count -= 1
  93.     @real_x = (@real_x * @jump_count + @x) / (@jump_count + 1.0)
  94.     @real_y = (@real_y * @jump_count + @y) / (@jump_count + 1.0)
  95.     update_bush_depth
  96.     if @jump_count == 0
  97.       @real_x = @x
  98.       @real_y = @y
  99.     end
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 梯子判定
  103.   #--------------------------------------------------------------------------
  104.   def ladder?
  105.     return false
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 茂み判定
  109.   #--------------------------------------------------------------------------
  110.   def bush?
  111.     return false
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 地形タグの取得
  115.   #--------------------------------------------------------------------------
  116.   def terrain_tag
  117.     return 0
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● リージョン ID の取得
  121.   #--------------------------------------------------------------------------
  122.   def region_id
  123.     return 0
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● まっすぐに移動
  127.   #     d       : 方向(2,4,6,8)
  128.   #     turn_ok : その場での向き変更を許可
  129.   #--------------------------------------------------------------------------
  130.   def move_straight(d, turn_ok = true)
  131.     @move_succeed = passable?(@x, @y, d)
  132.     if @move_succeed
  133.       set_direction(d)
  134.       @x += d == 6 ? 1 : d == 4 ? -1 : 0
  135.       @y += d == 2 ? 1 : d == 8 ? -1 : 0
  136.       increase_steps
  137.     elsif turn_ok
  138.       set_direction(d)
  139.     end
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 斜めに移動
  143.   #     horz : 横方向(4 or 6)
  144.   #     vert : 縦方向(2 or 8)
  145.   #--------------------------------------------------------------------------
  146.   def move_diagonal(horz, vert)
  147.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  148.     if @move_succeed
  149.       @x += horz == 6 ? 1 : horz == 4 ? -1 : 0
  150.       @y += vert == 2 ? 1 : vert == 8 ? -1 : 0
  151.       increase_steps
  152.     end
  153.     set_direction(horz) if @direction == reverse_dir(horz)
  154.     set_direction(vert) if @direction == reverse_dir(vert)
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● X 方向の距離計算
  158.   #--------------------------------------------------------------------------
  159.   def distance_x_from(x)
  160.     @x - x
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● Y 方向の距離計算
  164.   #--------------------------------------------------------------------------
  165.   def distance_y_from(y)
  166.     @y - y
  167.   end
  168. end

  169. #==============================================================================
  170. # ■ Game_SubMenu_Interpreter
  171. #==============================================================================
  172. class Game_SubMenu_Interpreter < Game_Interpreter
  173.   #--------------------------------------------------------------------------
  174.   # ● イベントのセットアップ
  175.   #--------------------------------------------------------------------------
  176.   def setup(list, scene)
  177.     clear
  178.     [url=home.php?mod=space&uid=420706]@Scene[/url] = scene
  179.     @list = list
  180.     create_fiber
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 実行
  184.   #--------------------------------------------------------------------------
  185.   def run
  186.     while @list[@index] do
  187.       execute_command
  188.       @index += 1
  189.     end
  190.     Fiber.yield
  191.     @fiber = nil
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 画面系コマンドの対象を取得
  195.   #--------------------------------------------------------------------------
  196.   def screen
  197.     @scene.screen
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● キャラクターの取得
  201.   #--------------------------------------------------------------------------
  202.   def get_character(param)
  203.     param > 0 ? @scene.get_event(param) : nil
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● コモンイベント
  207.   #--------------------------------------------------------------------------
  208.   def command_117
  209.     common_event = $data_common_events[@params[0]]
  210.     if common_event
  211.       child = Game_SubMenu_Interpreter.new(@depth + 1)
  212.       child.setup(common_event.list, @scene)
  213.       child.run
  214.     end
  215.   end
  216. end

  217. #==============================================================================
  218. # ■ Window_MenuCommand
  219. #==============================================================================
  220. class Window_MenuCommand
  221.   #--------------------------------------------------------------------------
  222.   # ○ 独自コマンドの追加用
  223.   #--------------------------------------------------------------------------
  224.   alias _wdtk_submenu_add_original_commands add_original_commands
  225.   def add_original_commands
  226.     WdTk::SubMenu::List.each {|com| add_command(com[0], :submenu) if com }
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● 選択項目の名前を取得
  230.   #--------------------------------------------------------------------------
  231.   def current_name
  232.     current_data ? current_data[:name] : nil
  233.   end
  234. end

  235. #==============================================================================
  236. # ■ Spriteset_SubMenu
  237. #==============================================================================
  238. class Spriteset_SubMenu
  239.   #--------------------------------------------------------------------------
  240.   # ● オブジェクト初期化
  241.   #--------------------------------------------------------------------------
  242.   def initialize(scene)
  243.     @scene = scene
  244.     create_viewports
  245.     @character_sprites = []
  246.     @picture_sprites = []
  247.     update
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● ビューポートの作成
  251.   #--------------------------------------------------------------------------
  252.   def create_viewports
  253.     @viewport1 = Viewport.new
  254.     @viewport2 = Viewport.new
  255.     @viewport2.z = 50
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 解放
  259.   #--------------------------------------------------------------------------
  260.   def dispose
  261.     dispose_characters
  262.     @picture_sprites.compact.each {|sprite| sprite.dispose }
  263.     dispose_viewports
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● キャラクタースプライトの解放
  267.   #--------------------------------------------------------------------------
  268.   def dispose_characters
  269.     @character_sprites.compact.each {|sprite| sprite.dispose }
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● ビューポートの解放
  273.   #--------------------------------------------------------------------------
  274.   def dispose_viewports
  275.     @viewport1.dispose
  276.     @viewport2.dispose
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● フレーム更新
  280.   #--------------------------------------------------------------------------
  281.   def update
  282.     update_characters
  283.     update_pictures
  284.     update_viewports
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● キャラクタースプライトの更新
  288.   #--------------------------------------------------------------------------
  289.   def update_characters
  290.     @scene.events.each do |i, event|
  291.       @character_sprites[i] ||= Sprite_Character.new(@viewport1, event)
  292.       @character_sprites[i].update
  293.     end
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● ピクチャスプライトの更新
  297.   #--------------------------------------------------------------------------
  298.   def update_pictures
  299.     @scene.screen.pictures.each do |pic|
  300.       @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
  301.       @picture_sprites[pic.number].update
  302.     end
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● ビューポートの更新
  306.   #--------------------------------------------------------------------------
  307.   def update_viewports
  308.     @viewport1.tone.set(@scene.screen.tone)
  309.     @viewport1.ox = @scene.screen.shake
  310.     @viewport2.color.set(@scene.screen.flash_color)
  311.     @viewport1.update
  312.     @viewport2.update
  313.   end
  314. end


  315. #==============================================================================
  316. # ■ Scene_Menu
  317. #==============================================================================
  318. class Scene_Menu
  319.   #--------------------------------------------------------------------------
  320.   # ○ コマンドウィンドウの作成
  321.   #--------------------------------------------------------------------------
  322.   alias _wdtk_submenu_create_command_window create_command_window
  323.   def create_command_window
  324.     _wdtk_submenu_create_command_window
  325.     @command_window.set_handler(:submenu, method(:command_submenu))
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● コマンド[サブメニュー]
  329.   #--------------------------------------------------------------------------
  330.   def command_submenu
  331.     param = WdTk::SubMenu::List.assoc(@command_window.current_name)
  332.     if param
  333.       SceneManager.call(Scene_ExSubMenu)
  334.       SceneManager.scene.prepare(*param)
  335.     else
  336.       @command_window.activate
  337.     end
  338.   end
  339. end

  340. #==============================================================================
  341. # ■ Scene_ExSubMenu
  342. #==============================================================================
  343. class Scene_ExSubMenu < Scene_MenuBase
  344.   #--------------------------------------------------------------------------
  345.   # ● 公開インスタンス変数
  346.   #--------------------------------------------------------------------------
  347.   attr_reader   :screen
  348.   attr_reader   :events
  349.   #--------------------------------------------------------------------------
  350.   # ● 準備
  351.   #--------------------------------------------------------------------------
  352.   def prepare(menu_name, main_id, sub_id)
  353.     @screen = Game_Screen.new
  354.     @main_interpreter = Game_SubMenu_Interpreter.new
  355.     common_event = $data_common_events[main_id]
  356.     @main_interpreter.setup(common_event.list, self) if common_event
  357.     @sub_interpreter = Game_SubMenu_Interpreter.new
  358.     common_event = $data_common_events[sub_id]
  359.     @sub_interpreter.setup(common_event.list, self) if common_event
  360.     @events = {}
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 開始処理
  364.   #--------------------------------------------------------------------------
  365.   def start
  366.     super
  367.     @spriteset = Spriteset_SubMenu.new(self)
  368.     create_message_window
  369.     create_scroll_text_window
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 終了前処理
  373.   #--------------------------------------------------------------------------
  374.   def pre_terminate
  375.     super
  376.     pre_battle_scene if SceneManager.scene_is?(Scene_Battle)
  377.     pre_title_scene  if SceneManager.scene_is?(Scene_Title)
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 終了処理
  381.   #--------------------------------------------------------------------------
  382.   def terminate
  383.     super
  384.     @spriteset.dispose
  385.     perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● フレーム更新(基本)
  389.   #--------------------------------------------------------------------------
  390.   def update_basic
  391.     super
  392.     @main_interpreter.update
  393.     return return_scene unless @main_interpreter.running?
  394.     @sub_interpreter.update
  395.     @events.each_value {|event| event.update }
  396.     @spriteset.update
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● 汎用フェード処理
  400.   #--------------------------------------------------------------------------
  401.   def fade_loop(duration)
  402.     duration.times do |i|
  403.       yield 255 * (i + 1) / duration
  404.       update_basic
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 画面のフェードイン
  409.   #--------------------------------------------------------------------------
  410.   def fadein(duration)
  411.     fade_loop(duration) {|v| Graphics.brightness = v }
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● 画面のフェードアウト
  415.   #--------------------------------------------------------------------------
  416.   def fadeout(duration)
  417.     fade_loop(duration) {|v| Graphics.brightness = 255 - v }
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● メッセージウィンドウの作成
  421.   #--------------------------------------------------------------------------
  422.   def create_message_window
  423.     @message_window = Window_Message.new
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● スクロール文章ウィンドウの作成
  427.   #--------------------------------------------------------------------------
  428.   def create_scroll_text_window
  429.     @scroll_text_window = Window_ScrollText.new
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● バトル画面遷移の前処理
  433.   #--------------------------------------------------------------------------
  434.   def pre_battle_scene
  435.     Graphics.update
  436.     Graphics.freeze
  437.     @spriteset.dispose_characters
  438.     BattleManager.save_bgm_and_bgs
  439.     BattleManager.play_battle_bgm
  440.     Sound.play_battle_start
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ● タイトル画面遷移の前処理
  444.   #--------------------------------------------------------------------------
  445.   def pre_title_scene
  446.     fadeout(60)
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 戦闘前トランジション実行
  450.   #--------------------------------------------------------------------------
  451.   def perform_battle_transition
  452.     Graphics.transition(60, "Graphics/System/BattleStart", 100)
  453.     Graphics.freeze
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● イベントの取得
  457.   #--------------------------------------------------------------------------
  458.   def get_event(event_id)
  459.     @events[event_id] ||= Game_SubMenu_Character.new
  460.   end
  461. end
复制代码

点评

不用理解什麼日文List = [["SYSTEM", 1, 2],["系統", 3],],那就會増加SYSTEM和系統二個選項了,選SYSTEM後執行公共事件1>執行公共事件2.選系統後執行公共事件3就這麼簡單   发表于 2015-1-13 17:31
除了日文有点费解 脚本get√ どま  发表于 2015-1-13 16:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
138
在线时间
304 小时
注册时间
2014-4-11
帖子
419
4
 楼主| 发表于 2015-1-13 16:42:09 | 只看该作者
15968715431 发表于 2015-1-13 11:32

solved, thanks.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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