Project1

标题: 菜单调整 [打印本页]

作者: 莫言别离    时间: 2015-6-17 09:19
标题: 菜单调整
倒腾半天把菜单倒腾成了这个样子,
现在想让红框里的东西移动到蓝框的位置,但是不知道在哪里调。
然后想让黄框里显示一张立绘不知道该怎么弄。
求指导

作者: taroxd    时间: 2015-6-17 09:24
第一个:自己到你脚本的对应窗口里调坐标
第二个:挂上一只 Sprite
作者: VIPArcher    时间: 2015-6-17 09:39
顺便这里:https://rpg.blue/thread-378738-1-1.html
作者: 莫言别离    时间: 2015-6-17 09:55
然而完全看不懂F1里的Sprite。
脚本什么的简直跟数学一样可恶
作者: cinderelmini    时间: 2015-6-17 17:38
这种情况……不知道怎么教………………
于是让窝接着当直接给成品的坏人吧…………
可以的话,能把修改后的Window_MenuStatus脚本弄上来咩?

作者: 莫言别离    时间: 2015-6-17 19:01
cinderelmini 发表于 2015-6-17 17:38
这种情况……不知道怎么教………………
于是让窝接着当直接给成品的坏人吧…………
可以的话,能把 ...

十分感谢!
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  菜单画面中,显示队伍成员状态的窗口
  6. #==============================================================================

  7. class Window_MenuStatus < Window_Selectable
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :pending_index            # 保留位置(整队用)
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对象
  14.   #--------------------------------------------------------------------------
  15.   def initialize(x, y)
  16.     super(160,286,385,130)
  17.     @pending_index = -1
  18.     refresh
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 获取窗口的宽度
  22.   #--------------------------------------------------------------------------
  23.   def window_width
  24.     Graphics.width - 160
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 获取窗口的高度
  28.   #--------------------------------------------------------------------------
  29.   def window_height
  30.     Graphics.height- 300
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 获取项目数
  34.   #--------------------------------------------------------------------------
  35.   def item_max
  36.     $game_party.members.size
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 获取项目的高度
  40.   #--------------------------------------------------------------------------
  41.   def item_height
  42.     (height - standard_padding * 2) / 4
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 绘制项目
  46.   #--------------------------------------------------------------------------
  47.   def draw_item(index)
  48.     actor = $game_party.members[index]
  49.     enabled = $game_party.battle_members.include?(actor)
  50.     rect = item_rect(index)
  51.     draw_item_background(index)
  52.     draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
  53.     draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 绘制项目的背景
  57.   #--------------------------------------------------------------------------
  58.   def draw_item_background(index)
  59.     if index == @pending_index
  60.       contents.fill_rect(item_rect(index), pending_color)
  61.     end
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 按下确定键时的处理
  65.   #--------------------------------------------------------------------------
  66.   def process_ok
  67.     super
  68.     $game_party.menu_actor = $game_party.members[index]
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 返回上一个选择的位置
  72.   #--------------------------------------------------------------------------
  73.   def select_last
  74.     select($game_party.menu_actor.index || 0)
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 设置保留位置(整队用)
  78.   #--------------------------------------------------------------------------
  79.   def pending_index=(index)
  80.     last_pending_index = @pending_index
  81.     @pending_index = index
  82.     redraw_item(@pending_index)
  83.     redraw_item(last_pending_index)
  84.   end
  85. end
复制代码

作者: cinderelmini    时间: 2015-6-17 20:58
本帖最后由 cinderelmini 于 2015-7-17 22:54 编辑
脚本在这

用法是Main前Insert,然后打开数据库把“用语”页的等级文字“Lv.”改成“年龄:”,
脚本前面四个大写变量可以自己填数字,总之是描绘名字和年龄的位置微调。
立绘文件命名为“Half_(队伍首位)角色名”放在pictures文件夹里。

唔。。。大概就是这样了。。。。

2015-07-17
找这两个。。


方法只保留最后两行:
像这样:

作者: 午睡的风铃    时间: 2015-6-18 15:59
本帖最后由 午睡的风铃 于 2015-6-18 16:06 编辑

胡乱折腾了一通,总算折腾出来了,不会写,改的默认脚本,行家见笑了。

显示队伍领队的肖像画,
这个不能即时刷新的,如果编队后光标默认在原本是领队的角色身上,那么关了菜单再打开后肖像画还是那个人的,默认在别人身上时,关了再开会刷新。
不过貌似编队是被丢掉的功能(─.─|||

同样,由于Window_MenuActor是Window_MenuStatus的子类,当在物品和技能界面选择目标时的窗口也和下图中放角色名字和等级的窗口尺寸一样。
需要个性化一下Window_MenuActor

正常情况下角色等级数值代表年龄
等级99时年龄变为不明(可在脚本内改)
等级98时,用变量表示年龄(变量号可在脚本内改),这个比如你的主角99岁了就给变量赋值99,或者更多,250岁,5211314岁什么的都行。

默认是窗口的优先级高于肖像画,如果需要肖像画高于窗口,把相关的注释掉就行。
脚本内相关行有说明,很容易找到,因为一共没几行,呃。

由于只是局部修改了默认脚本的某些部分,所以请保证以下类未做过改动。
Window_MenuCommand
Window_MenuStatus
Scene_Menu

效果图


脚本
放在默认脚本和Main之间
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_MenuCommand
  3. #==============================================================================
  4. class Window_MenuCommand < Window_Command
  5.   #--------------------------------------------------------------------------
  6.   # ● 初始化对象
  7.   #--------------------------------------------------------------------------
  8.   def initialize
  9.     super(0, Graphics.height - 72)
  10.     select_last
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 生成指令列表
  14.   #--------------------------------------------------------------------------
  15.   def make_command_list
  16.     add_main_commands
  17.     add_game_end_command
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 向指令列表添加主要的指令
  21.   #--------------------------------------------------------------------------
  22.   def add_main_commands
  23.     add_command(Vocab::item,   :item,   main_commands_enabled)
  24.   end
  25. end
  26. #==============================================================================
  27. # ■ Window_MenuStatus
  28. #==============================================================================
  29. class Window_MenuStatus < Window_Selectable
  30.   #--------------------------------------------------------------------------
  31.   # ● 获取窗口的高度
  32.   #--------------------------------------------------------------------------
  33.   def window_height
  34.     Graphics.height / 3
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 获取显示行数
  38.   #--------------------------------------------------------------------------
  39.   def visible_line_number
  40.     return 1
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 获取显示列数
  44.   #--------------------------------------------------------------------------
  45.   def col_max
  46.     return 1
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 获取项目的高度
  50.   #--------------------------------------------------------------------------
  51.   def item_height
  52.     height - standard_padding * 2
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 获取项目的高度
  56.   #--------------------------------------------------------------------------
  57.   def item_height
  58.     height - standard_padding * 2
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 绘制项目
  62.   #--------------------------------------------------------------------------
  63.   def draw_item(index)
  64.     actor = $game_party.members[index]
  65.     enabled = $game_party.battle_members.include?(actor)
  66.     rect = item_rect(index)
  67.     draw_item_background(index)
  68.     draw_actor_name(actor, rect.x + 4, rect.y + 4, 180)
  69.     change_color(system_color)
  70.     draw_text(rect.x + 4, rect.y + 30, 72, line_height, "年龄")
  71.     change_color(normal_color)
  72.     # (↓)这里调整年龄数值的位置
  73.     aw = 72                      # 宽度 字数太多被挤扁时改这里
  74.     ax = rect.x - aw + 126       # 位置X
  75.     # (↓)当角色99级时 年龄显示为:你猜 通常不会有人把99岁的长辈尊为主人公吧
  76.     if actor.level == 99
  77.       draw_text(ax, rect.y + 30, aw, line_height, "你猜", 2)
  78.     # (↓)当角色98级时 用2号(可更改)变量来表示年龄
  79.     #    如果你打算把99岁的长辈尊为主人公
  80.     #    或者你的主人公是个寿星啊精灵啊恶魔啊什么的 可以活到三位数年龄
  81.     elsif actor.level == 98                                    # (↓)变量号
  82.       draw_text(ax, rect.y + 30, aw, line_height, $game_variables[2], 2)
  83.     # (↓)不满足以上两种情况 以等级的数值表示年龄
  84.     else
  85.       draw_text(ax, rect.y + 30, aw, line_height, actor.level, 2)
  86.     end
  87.   end
  88. end
  89. #==============================================================================
  90. # ■ Window_ActorPortrait
  91. #==============================================================================
  92. class Window_ActorPortrait < Window_Base
  93.   #--------------------------------------------------------------------------
  94.   # ● 初始化
  95.   #--------------------------------------------------------------------------
  96.   def initialize(x, y)
  97.     super(-12, -12, Graphics.width + 24, Graphics.height + 24)
  98.     self.opacity = 0
  99.     refresh
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 角色
  103.   #--------------------------------------------------------------------------
  104.   def actor=(actor)
  105.     return if @actor == actor
  106.     @actor = actor
  107.     refresh
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 刷新
  111.   #--------------------------------------------------------------------------
  112.   def refresh
  113.     contents.clear
  114.     return unless @actor
  115.     draw_player
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 绘制角色肖像画
  119.   #--------------------------------------------------------------------------
  120.   def draw_player
  121.     # (↓)这里未调整肖像画位置
  122.     px = 20    # 位置X
  123.     py = 0     # 位置Y
  124.     # (↓)肖像画路径 \Graphics\Pictures
  125.     #    文件名为: ActorPortrait + 角色ID  例如20号角色: ActorPortrait20
  126.     bitmap = Cache.picture("ActorPortrait" + @actor.id.to_s)
  127.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  128.     contents.blt(contents_width - bitmap.width - px,
  129.                  contents_height - bitmap.height - py, bitmap, rect)
  130.     bitmap.dispose
  131.   end
  132. end
  133. #==============================================================================
  134. # ■ Scene_Menu
  135. #==============================================================================
  136. class Scene_Menu < Scene_MenuBase
  137.   #--------------------------------------------------------------------------
  138.   # ● 开始处理
  139.   #--------------------------------------------------------------------------
  140.   def start
  141.     super
  142.     create_portrait_window
  143.     create_command_window
  144.     create_status_window
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 生成肖像画窗口
  148.   #--------------------------------------------------------------------------
  149.   def create_portrait_window
  150.     @actorportrait_window = Window_ActorPortrait.new(0, 0)
  151.     @actorportrait_window.z = 999     # 优先级 需要肖像画遮住窗口就注释掉这一行
  152.     @actorportrait_window.viewport = @viewport
  153.     @actorportrait_window.actor = @actor
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 生成状态窗口
  157.   #--------------------------------------------------------------------------
  158.   def create_status_window
  159.     wy = Graphics.height - Graphics.height / 3
  160.     @status_window = Window_MenuStatus.new(@command_window.width, wy)
  161.     @status_window.z = 1000           # 优先级 需要肖像画遮住窗口就注释掉这一行
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 生成指令窗口
  165.   #--------------------------------------------------------------------------
  166.   def create_command_window
  167.     @command_window = Window_MenuCommand.new
  168.     @command_window.z = 1000          # 优先级 需要肖像画遮住窗口就注释掉这一行
  169.     @command_window.set_handler(:item,      method(:command_item))
  170.     @command_window.set_handler(:game_end,  method(:command_game_end))
  171.     @command_window.set_handler(:cancel,    method(:return_scene))
  172.   end
  173. end

作者: 莫言别离    时间: 2015-7-17 23:04
cinderelmini 发表于 2015-6-17 20:58
[fold=脚本在这][/fold]
用法是Main前Insert,然后打开数据库把“用语”页的等级文字“Lv.”改成“年龄:” ...


这样子改好了,
但是还是用物品立绘就会消失。。
作者: cinderelmini    时间: 2015-7-17 23:55
莫言别离 发表于 2015-7-17 23:04
这样子改好了,
但是还是用物品立绘就会消失。。

因为物品使用的时候选择对象的窗口是菜单状态栏窗口的子类……所以…………
总之刷新这个子窗口的时候把父类也刷新了,但是不知道为什么单纯clear却不再显示了…………
解决方法:

放在那个立绘窗口脚本下面,或者能理解的话放在它里面。。
像这样





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