Project1

标题: 不知道怎么修改菜单。 [打印本页]

作者: 向日葵丶    时间: 2013-2-8 17:10
标题: 不知道怎么修改菜单。
想把菜单修改成特别简易的那种,不知道该怎么修改,放了一张图。
作者: 结城照美    时间: 2013-2-8 19:41
去看这帖的沙发和4L
日经问题
作者: 我的米呀    时间: 2013-2-8 22:53
本帖最后由 我的米呀 于 2013-2-11 01:02 编辑

简单写了一个,顺便加了个滑动效果。
RUBY 代码复制
  1. =begin
  2. #############################################################################
  3.  单人简易滑动菜单(VX) v1.0 by 我的米呀
  4.  
  5.  说明:把本脚本插在Main上方即可。
  6. #############################################################################
  7. =end
  8.  
  9.  
  10. #==============================================================================
  11. # ■ Window_MenuStatus
  12. #------------------------------------------------------------------------------
  13. #  显示菜单画面和同伴状态的窗口。
  14. #==============================================================================
  15.  
  16. class Window_MenuStatus < Window_Selectable
  17.   #--------------------------------------------------------------------------
  18.   # ● 初始化对像
  19.   #     x      : 窗口 X 座标
  20.   #     y      : 窗口 Y 座标
  21.   #--------------------------------------------------------------------------
  22.  
  23.   def initialize(x, y)
  24.     super(x, y, 350, 120)
  25.     refresh
  26.     self.active = false
  27.     self.index = -1
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新
  31.   #--------------------------------------------------------------------------
  32.   def refresh
  33.     self.contents.clear
  34.     @item_max = $game_party.members.size
  35.     for actor in $game_party.members
  36.       draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
  37.       x = 104
  38.       y = actor.index * 96 + WLH / 2
  39.       draw_actor_name(actor, x, y)
  40.       draw_actor_class(actor, x + 120, y)
  41.       draw_actor_level(actor, x, y + WLH * 1)
  42.       draw_actor_state(actor, x, y + WLH * 2)
  43.       draw_actor_hp(actor, x + 60, y + WLH * 1)
  44.       draw_actor_mp(actor, x + 60, y + WLH * 2)
  45.     end
  46.   end
  47.  
  48. end
  49. #==============================================================================
  50. # ■ Scene_File
  51. #------------------------------------------------------------------------------
  52. #  存档画面及读档画面的类。
  53. #==============================================================================
  54.  
  55. class Scene_File_1 < Scene_Base
  56.   #--------------------------------------------------------------------------
  57.   # ● 初始化对像
  58.   #     saving     : 存档标志(false则为读档)
  59.   #     from_title : 标志:是由标题画面的「继续游戏」调用的
  60.   #     from_event : 标志:是由事件「呼叫存档画面」命令调用的
  61.   #--------------------------------------------------------------------------
  62.   def initialize(saving, from_title, from_event)
  63.     @saving = saving
  64.     @from_title = from_title
  65.     @from_event = from_event
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 开始处理
  69.   #--------------------------------------------------------------------------
  70.   def start
  71.     super
  72.     create_menu_background
  73.     @help_window = Window_Help.new
  74.     create_savefile_windows
  75.     if @saving
  76.       @index = $game_temp.last_file_index
  77.       @help_window.set_text(Vocab::SaveMessage)
  78.     else
  79.       @index = self.latest_file_index
  80.       @help_window.set_text(Vocab::LoadMessage)
  81.     end
  82.     @savefile_windows[@index].selected = true
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 结束处理
  86.   #--------------------------------------------------------------------------
  87.   def terminate
  88.     super
  89.     dispose_menu_background
  90.     @help_window.dispose
  91.     dispose_item_windows
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 回到原画面
  95.   #--------------------------------------------------------------------------
  96.   def return_scene
  97.       $scene = Scene_Menu.new(1)
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 更新画面
  101.   #--------------------------------------------------------------------------
  102.   def update
  103.     super
  104.     update_menu_background
  105.     @help_window.update
  106.     update_savefile_windows
  107.     update_savefile_selection
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 生成存档窗口
  111.   #--------------------------------------------------------------------------
  112.   def create_savefile_windows
  113.     @savefile_windows = []
  114.     for i in 0..3
  115.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  116.     end
  117.     @item_max = 4
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 释放存档窗口
  121.   #--------------------------------------------------------------------------
  122.   def dispose_item_windows
  123.     for window in @savefile_windows
  124.       window.dispose
  125.     end
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 更新存档窗口
  129.   #--------------------------------------------------------------------------
  130.   def update_savefile_windows
  131.     for window in @savefile_windows
  132.       window.update
  133.     end
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 更新存档文件选择
  137.   #--------------------------------------------------------------------------
  138.   def update_savefile_selection
  139.     if Input.trigger?(Input::C)
  140.       determine_savefile
  141.     elsif Input.trigger?(Input::B)
  142.       Sound.play_cancel
  143.       return_scene
  144.     else
  145.       last_index = @index
  146.       if Input.repeat?(Input::DOWN)
  147.         cursor_down(Input.trigger?(Input::DOWN))
  148.       end
  149.       if Input.repeat?(Input::UP)
  150.         cursor_up(Input.trigger?(Input::UP))
  151.       end
  152.       if @index != last_index
  153.         Sound.play_cursor
  154.         @savefile_windows[last_index].selected = false
  155.         @savefile_windows[@index].selected = true
  156.       end
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 确认存档文件
  161.   #--------------------------------------------------------------------------
  162.   def determine_savefile
  163.     if @saving
  164.       Sound.play_save
  165.       do_save
  166.     else
  167.       if @savefile_windows[@index].file_exist
  168.         Sound.play_load
  169.         do_load
  170.       else
  171.         Sound.play_buzzer
  172.         return
  173.       end
  174.     end
  175.     $game_temp.last_file_index = @index
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 光标下移
  179.   #     wrap : 允许循环
  180.   #--------------------------------------------------------------------------
  181.   def cursor_down(wrap)
  182.     if @index < @item_max - 1 or wrap
  183.       @index = (@index + 1) % @item_max
  184.     end
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 光标上移
  188.   #     wrap : 允许循环
  189.   #--------------------------------------------------------------------------
  190.   def cursor_up(wrap)
  191.     if @index > 0 or wrap
  192.       @index = (@index - 1 + @item_max) % @item_max
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 生成文件名称
  197.   #     file_index : 存档位置(0~3)
  198.   #--------------------------------------------------------------------------
  199.   def make_filename(file_index)
  200.     return "Save#{file_index + 1}.rvdata"
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 选择最近存档的文件
  204.   #--------------------------------------------------------------------------
  205.   def latest_file_index
  206.     index = 0
  207.     latest_time = Time.at(0)
  208.     for i in [email]0...@savefile_windows.size[/email]
  209.       if @savefile_windows[i].time_stamp > latest_time
  210.         latest_time = @savefile_windows[i].time_stamp
  211.         index = i
  212.       end
  213.     end
  214.     return index
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 执行存档
  218.   #--------------------------------------------------------------------------
  219.   def do_save
  220.     file = File.open(@savefile_windows[@index].filename, "wb")
  221.     write_save_data(file)
  222.     file.close
  223.     return_scene
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 执行读档
  227.   #--------------------------------------------------------------------------
  228.   def do_load
  229.     file = File.open(@savefile_windows[@index].filename, "rb")
  230.     read_save_data(file)
  231.     file.close
  232.     $scene = Scene_Map.new
  233.     RPG::BGM.fade(1500)
  234.     Graphics.fadeout(60)
  235.     Graphics.wait(40)
  236.     @last_bgm.play
  237.     @last_bgs.play
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 写入存档数据
  241.   #     file : 写入存档对象(已开启)
  242.   #--------------------------------------------------------------------------
  243.   def write_save_data(file)
  244.     characters = []
  245.     for actor in $game_party.members
  246.       characters.push([actor.character_name, actor.character_index])
  247.     end
  248.     $game_system.save_count += 1
  249.     $game_system.version_id = $data_system.version_id
  250.     @last_bgm = RPG::BGM::last
  251.     @last_bgs = RPG::BGS::last
  252.     Marshal.dump(characters,           file)
  253.     Marshal.dump(Graphics.frame_count, file)
  254.     Marshal.dump(@last_bgm,            file)
  255.     Marshal.dump(@last_bgs,            file)
  256.     Marshal.dump($game_system,         file)
  257.     Marshal.dump($game_message,        file)
  258.     Marshal.dump($game_switches,       file)
  259.     Marshal.dump($game_variables,      file)
  260.     Marshal.dump($game_self_switches,  file)
  261.     Marshal.dump($game_actors,         file)
  262.     Marshal.dump($game_party,          file)
  263.     Marshal.dump($game_troop,          file)
  264.     Marshal.dump($game_map,            file)
  265.     Marshal.dump($game_player,         file)
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 读出存档数据
  269.   #     file : 读出存档对象(已开启)
  270.   #--------------------------------------------------------------------------
  271.   def read_save_data(file)
  272.     characters           = Marshal.load(file)
  273.     Graphics.frame_count = Marshal.load(file)
  274.     @last_bgm            = Marshal.load(file)
  275.     @last_bgs            = Marshal.load(file)
  276.     $game_system         = Marshal.load(file)
  277.     $game_message        = Marshal.load(file)
  278.     $game_switches       = Marshal.load(file)
  279.     $game_variables      = Marshal.load(file)
  280.     $game_self_switches  = Marshal.load(file)
  281.     $game_actors         = Marshal.load(file)
  282.     $game_party          = Marshal.load(file)
  283.     $game_troop          = Marshal.load(file)
  284.     $game_map            = Marshal.load(file)
  285.     $game_player         = Marshal.load(file)
  286.     if $game_system.version_id != $data_system.version_id
  287.       $game_map.setup($game_map.map_id)
  288.       $game_player.center($game_player.x, $game_player.y)
  289.     end
  290.   end
  291. end
  292.  
  293. #==============================================================================
  294. # ■ Scene_Menu
  295. #------------------------------------------------------------------------------
  296. #  处理菜单画面的类。
  297. #==============================================================================
  298.  
  299. class Scene_Menu < Scene_Base
  300.   #--------------------------------------------------------------------------
  301.   # ● 初始化对像
  302.   #     menu_index : 命令窗口光标初始位置
  303.   #--------------------------------------------------------------------------
  304.   def initialize(menu_index = 0)
  305.     @menu_index = menu_index
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 开始处理
  309.   #--------------------------------------------------------------------------
  310.   def start
  311.     super
  312.     create_menu_background
  313.     create_command_window
  314.     @status_window = Window_MenuStatus.new(160, 0)
  315.     @status_window.x = 650
  316.     @status_window.y = 280
  317.     @slide = false
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● 结束处理
  321.   #--------------------------------------------------------------------------
  322.   def terminate
  323.     super
  324.     dispose_menu_background
  325.     @command_window.dispose
  326.     @status_window.dispose
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 更新画面
  330.   #--------------------------------------------------------------------------
  331.   def update
  332.     super
  333.     if @slide == false
  334.     @command_window.x += 50 unless @command_window.x == 50
  335.     @status_window.x -= 50 unless @status_window.x == 150
  336.   else
  337.     @command_window.x -= 50 unless @command_window.x == -550
  338.     @status_window.x += 50 unless @status_window.x == 650
  339.     end
  340.     update_menu_background
  341.     @command_window.update
  342.     @status_window.update
  343.     if @command_window.active
  344.       update_command_selection
  345.     elsif @status_window.active
  346.       update_actor_selection
  347.     end
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 生成命令窗口
  351.   #--------------------------------------------------------------------------
  352.   def create_command_window
  353.     s1 = Vocab::item
  354.     s2 = "读取"
  355.     @command_window = Window_Command.new(90, [s1, s2])
  356.     @command_window.index = @menu_index
  357.     @command_window.x = -550
  358.     @command_window.y = 300
  359.     if $game_party.members.size == 0          # 如果队伍为空
  360.       @command_window.draw_item(0, false)     # 无效化物品选项
  361.       @command_window.draw_item(1, false)     # 无效化技能选项
  362.     end
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 更新命令窗口
  366.   #--------------------------------------------------------------------------
  367.   def update_command_selection
  368.     $scene = Scene_Map.new if @command_window.x <= -550 and @slide == true
  369.     if Input.trigger?(Input::B)
  370.       @slide = true
  371.       Sound.play_cancel
  372.     elsif Input.trigger?(Input::C)
  373.       @slide = true
  374.       if $game_party.members.size == 0 and @command_window.index < 4
  375.         Sound.play_buzzer
  376.         return
  377.       elsif $game_system.save_disabled and @command_window.index == 4
  378.         Sound.play_buzzer
  379.         return
  380.       end
  381.       Sound.play_decision
  382.       case @command_window.index
  383.       when 0      # 物品
  384.         $scene = Scene_Item.new
  385.       when 1      # 读档
  386.         $scene = Scene_File_1.new(false, true, false)
  387.       end
  388.     end
  389.   end
  390. end

效果就是这图

作者: 向日葵丶    时间: 2013-2-9 07:13
本帖最后由 向日葵丶 于 2013-2-9 07:18 编辑
我的米呀 发表于 2013-2-8 22:53
简单写了一个,顺便加了个滑动效果。
=begin
########################################################## ...


谢谢,但是总说有错误是什么情况?
作者: 向日葵丶    时间: 2013-2-9 12:45
向日葵丶 发表于 2013-2-9 07:13
谢谢,但是总说有错误是什么情况?

没有,就是按照你说的把这个脚本放到main的前面。
作者: 向日葵丶    时间: 2013-2-9 12:57
我的米呀 发表于 2013-2-8 22:53
简单写了一个,顺便加了个滑动效果。
=begin
########################################################## ...

我没有使用其他的脚本。
作者: 774741359    时间: 2013-2-9 18:15
向日葵丶 发表于 2013-2-9 12:57
我没有使用其他的脚本。

出的错误截图上来。
作者: 向日葵丶    时间: 2013-2-9 18:29
774741359 发表于 2013-2-9 18:15
出的错误截图上来。

就是进入之后选择读档的时候就出现错误提示窗口。
作者: 774741359    时间: 2013-2-9 20:50
向日葵丶 发表于 2013-2-9 18:29
就是进入之后选择读档的时候就出现错误提示窗口。

就要你提示框上的内容
作者: 我的米呀    时间: 2013-2-10 01:27
不介意的话把data文件夹打包下上传附件吧,这样看起问题来方便点。
作者: 向日葵丶    时间: 2013-2-10 11:41
774741359 发表于 2013-2-9 20:50
就要你提示框上的内容

就是这个图。

截图.png (8.03 KB, 下载次数: 57)

截图.png

作者: 我的米呀    时间: 2013-2-11 01:01
等,我了了,你用的是ace是吧?原先我写的那份是vx用的,现在做了个ACE版的,不过因为水平问题目前还没弄出原来VX版的滑动效果,见谅见谅。
RUBY 代码复制
  1. =begin
  2. #############################################################################
  3.  单人简易滑动菜单(ACE) v1.0 by 我的米呀
  4.  
  5.  说明:把本脚本插在Main上方即可。
  6. #############################################################################
  7. =end
  8. class Window_Base < Window
  9.   def draw_actor_simple_status(actor, x, y)
  10.     draw_actor_name(actor, x, y)
  11.     draw_actor_level(actor, x, y + line_height * 1)
  12.     draw_actor_icons(actor, x, y + line_height * 2)
  13.     draw_actor_class(actor, x + 120, y)
  14.     draw_actor_hp(actor, x + 80, y + line_height * 1)
  15.     draw_actor_mp(actor, x + 80, y + line_height * 2)
  16.   end
  17. end
  18. class Window_MenuCommand < Window_Command
  19.   def window_width
  20.     return 90
  21.   end
  22. end
  23. class Window_MenuStatus < Window_Selectable
  24.   def initialize(x, y)
  25.     super(x, y, 350, 120)
  26.     @pending_index = -1
  27.     refresh
  28.   end
  29.   def draw_item(index)
  30.     actor = $game_party.members[index]
  31.     enabled = $game_party.battle_members.include?(actor)
  32.     rect = item_rect(index)
  33.     draw_item_background(index)
  34.     draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
  35.     draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
  36.   end
  37. end
  38. class Window_MenuCommand < Window_Command
  39.   def add_main_commands
  40.     add_command(Vocab::item,   :item,   main_commands_enabled)
  41.     add_command("读取",  :continue,  main_commands_enabled)
  42.   end
  43.   def add_save_command
  44.   end
  45.   def add_game_end_command
  46.   end
  47.   def add_formation_command
  48.   end
  49. end
  50. class Scene_Menu < Scene_MenuBase
  51.   def start
  52.     super
  53.     create_command_window
  54.     create_status_window
  55.   end
  56.   def create_command_window
  57.     @command_window = Window_MenuCommand.new
  58.     @command_window.set_handler(:item,      method(:command_item))
  59.     @command_window.set_handler(:continue,      method(:command_continue))
  60.     @command_window.set_handler(:cancel,    method(:return_scene))
  61.     @command_window.x = 50
  62.     @command_window.y = 300
  63.   end
  64.   def create_status_window
  65.     @status_window = Window_MenuStatus.new(@command_window.width, 0)
  66.     @status_window.x = 150
  67.     @status_window.y = 280
  68.   end
  69.   def command_continue
  70.     SceneManager.call(Scene_Load)
  71.   end
  72. end

作者: 向日葵丶    时间: 2013-2-11 11:06
我的米呀 发表于 2013-2-11 01:01
等,我了了,你用的是ace是吧?原先我写的那份是vx用的,现在做了个ACE版的,不过因为水平问题目前还没弄出 ...

没关系,已经很感谢来帮助我,如果我又发现问题会第一时间告诉你的。
作者: 向日葵丶    时间: 2013-2-11 11:19
我的米呀 发表于 2013-2-11 01:01
等,我了了,你用的是ace是吧?原先我写的那份是vx用的,现在做了个ACE版的,不过因为水平问题目前还没弄出 ...

还是不能用,还是有问题。

截图.png (8.12 KB, 下载次数: 59)

截图.png

作者: 我的米呀    时间: 2013-2-21 21:04
好吧,LZ你不愿意上传DATA文件……虽然单凭报错我还真不知道在不带任何外挂脚本的情况下是怎么出错的,不过既然你没有用任何其他外挂脚本,那直接复制我这个脚本文件应该没问题,我这里面也没有其他外挂脚本。
Scripts.rar (144.73 KB, 下载次数: 12)

另外我想到个事,就是你可以重新开个存档试一下会不会报错,我填我自己的坑的时候有时候改过脚本后读取改过脚本前的存档就会报错,但是新开个存档就没问题。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1