查看: 3470|回复: 9

[已经解决] 菜单调整

[复制链接]

爪子

梦石
0
星屑
1678
在线时间
882 小时
注册时间
2014-8-28
回帖
1058
发表于 2015-6-17 09:19:07 | 显示全部楼层 |阅读模式

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

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

×
倒腾半天把菜单倒腾成了这个样子,
现在想让红框里的东西移动到蓝框的位置,但是不知道在哪里调。
然后想让黄框里显示一张立绘不知道该怎么弄。
求指导
1.png
个人坑《凝聚的祈愿》更新日记
网瘾少女的领域-Lofter
一时骂人一时爽,一直骂人一直爽^o^

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-6-17 09:24:48 | 显示全部楼层
第一个:自己到你脚本的对应窗口里调坐标
第二个:挂上一只 Sprite

点评

[s]是雪碧[/s],详细的可以看F1里的Sprite类  发表于 2015-6-17 09:38
新建了个工程把第一个搞定了...  发表于 2015-6-17 09:32
顺带,Sprite是什么?  发表于 2015-6-17 09:30
_(:з」∠)_第一个改的太乱了我找不到是哪个脚本了。。  发表于 2015-6-17 09:29

评分

参与人数 1星屑 +150 收起 理由
VIPArcher + 150 认可答案

查看全部评分

回复

使用道具 举报

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2015-6-17 09:39:07 | 显示全部楼层
回复

使用道具 举报

爪子

梦石
0
星屑
1678
在线时间
882 小时
注册时间
2014-8-28
回帖
1058
 楼主| 发表于 2015-6-17 09:55:50 | 显示全部楼层
然而完全看不懂F1里的Sprite。
脚本什么的简直跟数学一样可恶
个人坑《凝聚的祈愿》更新日记
网瘾少女的领域-Lofter
一时骂人一时爽,一直骂人一直爽^o^
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-6-17 17:38:24 | 显示全部楼层
这种情况……不知道怎么教………………
于是让窝接着当直接给成品的坏人吧…………
可以的话,能把修改后的Window_MenuStatus脚本弄上来咩?
回复

使用道具 举报

爪子

梦石
0
星屑
1678
在线时间
882 小时
注册时间
2014-8-28
回帖
1058
 楼主| 发表于 2015-6-17 19:01:16 | 显示全部楼层
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
复制代码
个人坑《凝聚的祈愿》更新日记
网瘾少女的领域-Lofter
一时骂人一时爽,一直骂人一直爽^o^
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-6-17 20:58:00 | 显示全部楼层
本帖最后由 cinderelmini 于 2015-7-17 22:54 编辑

脚本在这
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  菜单画面中,显示队伍成员状态的窗口
  6. #==============================================================================

  7. class Window_MenuStatus < Window_Selectable
  8.   
  9.   # 名字坐标位置微调(PS:可以填负数)
  10.   A_NAME_X = 0
  11.   A_NAME_Y = 0
  12.   # 年龄坐标位置微调
  13.   A_AGE_X = 0
  14.   A_AGE_Y = 0
  15.   
  16.   #--------------------------------------------------------------------------
  17.   # ● 定义实例变量
  18.   #--------------------------------------------------------------------------
  19.   attr_reader   :pending_index            # 保留位置(整队用)
  20.   #--------------------------------------------------------------------------
  21.   # ● 初始化对象
  22.   #--------------------------------------------------------------------------
  23.   def initialize(x, y)
  24.     super(160,286,385,130)
  25.     @pending_index = -1
  26.     # 生成立绘 ==================
  27.     @image = Sprite.new
  28.     @image.x = 0 # 根据立绘图片尺寸,自己调一下图片的位置,下面的y也一样。
  29.     @image.y = 0
  30.     @image.z = 999
  31.     # ===========================
  32.     refresh
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 获取项目的高度
  36.   #--------------------------------------------------------------------------
  37.   def item_height
  38.     (height - standard_padding * 2) / 4
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 绘制项目
  42.   #--------------------------------------------------------------------------
  43.   def draw_item(index)
  44.     actor = $game_party.members[index]
  45.     enabled = $game_party.battle_members.include?(actor)
  46.     rect = item_rect(index)
  47.     draw_actor_name(actor, rect.x + A_NAME_X, rect.y + A_NAME_Y)
  48.     draw_actor_level(actor, rect.x + A_AGE_X, rect.y + A_AGE_Y + line_height)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 绘制等级
  52.   #--------------------------------------------------------------------------
  53.   def draw_actor_level(actor, x, y)
  54.     change_color(system_color)
  55.     draw_text(x, y, 92, line_height, Vocab::level_a)
  56.     change_color(normal_color)
  57.     draw_text(x, y, 92, line_height, actor.level, 2)
  58.   end
  59.   
  60.   #---------------------------------
  61.   # ○ 刷新(添加立绘)
  62.   #---------------------------------
  63.   alias c_150617_refresh refresh
  64.   def refresh
  65.     c_150617_refresh
  66.     # 清除一下立绘图形(其实单一角色的话并没有啥用)
  67.     @image.bitmap.clear if @image.bitmap
  68.     # 显示立绘(命名方式可以自己改)
  69.     @image.bitmap = Cache.picture("Half_" + $game_party.members[0].name)
  70.   end
  71.    
  72.   #---------------------------------
  73.   # ○ 释放
  74.   #---------------------------------
  75.   alias c_150617_dispose dispose
  76.   def dispose
  77.     c_150617_dispose
  78.     @image.dispose
  79.   end
  80.   
  81. end
复制代码

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

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

2015-07-17
找这两个。。  #--------------------------------------------------------------------------
  # ● 显示子窗口
  #--------------------------------------------------------------------------
  def show_sub_window(window)
     width_remain = Graphics.width - window.width
     window.x = cursor_left? ? width_remain : 0
     @viewport.rect.x = @viewport.ox = cursor_left? ? 0 : window.width
     @viewport.rect.width = width_remain
    window.show.activate
  end
  #--------------------------------------------------------------------------
  # ● 隐藏子窗口
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
     @viewport.rect.x = @viewport.ox = 0
     @viewport.rect.width = Graphics.width
    window.hide.deactivate
    activate_item_window
  end


方法只保留最后两行:
像这样:  #--------------------------------------------------------------------------
  # ● 显示子窗口
  #--------------------------------------------------------------------------
  def show_sub_window(window)
#~     width_remain = Graphics.width - window.width
#~     window.x = cursor_left? ? width_remain : 0
#~     @viewport.rect.x = @viewport.ox = cursor_left? ? 0 : window.width
#~     @viewport.rect.width = width_remain
    window.show.activate
  end
  #--------------------------------------------------------------------------
  # ● 隐藏子窗口
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
#~     @viewport.rect.x = @viewport.ox = 0
#~     @viewport.rect.width = Graphics.width
    window.hide.deactivate
    activate_item_window
  end

点评

楼层更新、、  发表于 2015-7-17 22:55
望天,没有找到这句在哪。。  发表于 2015-7-17 22:50
啊错了。。应该是@status_window  发表于 2015-7-17 22:37
大概是viewport的锅………………能想到的办法只能是脱离viewport…………@item_window.viewport = @viewport这句。。。没特殊需求的话。。删掉吧。。  发表于 2015-7-17 22:36
突然发现一个问题,使用道具的话立绘就会消失  发表于 2015-7-17 19:31

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
1736
在线时间
761 小时
注册时间
2013-9-23
回帖
180

开拓者

发表于 2015-6-18 15:59:18 | 显示全部楼层
本帖最后由 午睡的风铃 于 2015-6-18 16:06 编辑

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

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

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

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

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

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

效果图
未标题-2.png

脚本
放在默认脚本和Main之间
[pre lang="ruby"]#==============================================================================
# ■ Window_MenuCommand
#==============================================================================
class Window_MenuCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    super(0, Graphics.height - 72)
    select_last
  end
  #--------------------------------------------------------------------------
  # ● 生成指令列表
  #--------------------------------------------------------------------------
  def make_command_list
    add_main_commands
    add_game_end_command
  end
  #--------------------------------------------------------------------------
  # ● 向指令列表添加主要的指令
  #--------------------------------------------------------------------------
  def add_main_commands
    add_command(Vocab::item,   :item,   main_commands_enabled)
  end
end
#==============================================================================
# ■ Window_MenuStatus
#==============================================================================
class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 获取窗口的高度
  #--------------------------------------------------------------------------
  def window_height
    Graphics.height / 3
  end
  #--------------------------------------------------------------------------
  # ● 获取显示行数
  #--------------------------------------------------------------------------
  def visible_line_number
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 获取显示列数
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 获取项目的高度
  #--------------------------------------------------------------------------
  def item_height
    height - standard_padding * 2
  end
  #--------------------------------------------------------------------------
  # ● 获取项目的高度
  #--------------------------------------------------------------------------
  def item_height
    height - standard_padding * 2
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    draw_item_background(index)
    draw_actor_name(actor, rect.x + 4, rect.y + 4, 180)
    change_color(system_color)
    draw_text(rect.x + 4, rect.y + 30, 72, line_height, "年龄")
    change_color(normal_color)
    # (↓)这里调整年龄数值的位置
    aw = 72                      # 宽度 字数太多被挤扁时改这里
    ax = rect.x - aw + 126       # 位置X
    # (↓)当角色99级时 年龄显示为:你猜 通常不会有人把99岁的长辈尊为主人公吧
    if actor.level == 99
      draw_text(ax, rect.y + 30, aw, line_height, "你猜", 2)
    # (↓)当角色98级时 用2号(可更改)变量来表示年龄
    #    如果你打算把99岁的长辈尊为主人公
    #    或者你的主人公是个寿星啊精灵啊恶魔啊什么的 可以活到三位数年龄
    elsif actor.level == 98                                    # (↓)变量号
      draw_text(ax, rect.y + 30, aw, line_height, $game_variables[2], 2)
    # (↓)不满足以上两种情况 以等级的数值表示年龄
    else
      draw_text(ax, rect.y + 30, aw, line_height, actor.level, 2)
    end
  end
end
#==============================================================================
# ■ Window_ActorPortrait
#==============================================================================
class Window_ActorPortrait < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(-12, -12, Graphics.width + 24, Graphics.height + 24)
    self.opacity = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 角色
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    return unless @actor
    draw_player
  end
  #--------------------------------------------------------------------------
  # ● 绘制角色肖像画
  #--------------------------------------------------------------------------
  def draw_player
    # (↓)这里未调整肖像画位置
    px = 20    # 位置X
    py = 0     # 位置Y
    # (↓)肖像画路径 \Graphics\Pictures
    #    文件名为: ActorPortrait + 角色ID  例如20号角色: ActorPortrait20
    bitmap = Cache.picture("ActorPortrait" + @actor.id.to_s)
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    contents.blt(contents_width - bitmap.width - px,
                 contents_height - bitmap.height - py, bitmap, rect)
    bitmap.dispose
  end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_portrait_window
    create_command_window
    create_status_window
  end
  #--------------------------------------------------------------------------
  # ● 生成肖像画窗口
  #--------------------------------------------------------------------------
  def create_portrait_window
    @actorportrait_window = Window_ActorPortrait.new(0, 0)
    @actorportrait_window.z = 999     # 优先级 需要肖像画遮住窗口就注释掉这一行
    @actorportrait_window.viewport = @viewport
    @actorportrait_window.actor = @actor
  end
  #--------------------------------------------------------------------------
  # ● 生成状态窗口
  #--------------------------------------------------------------------------
  def create_status_window
    wy = Graphics.height - Graphics.height / 3
    @status_window = Window_MenuStatus.new(@command_window.width, wy)
    @status_window.z = 1000           # 优先级 需要肖像画遮住窗口就注释掉这一行
  end
  #--------------------------------------------------------------------------
  # ● 生成指令窗口
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_MenuCommand.new
    @command_window.z = 1000          # 优先级 需要肖像画遮住窗口就注释掉这一行
    @command_window.set_handler(:item,      method(:command_item))
    @command_window.set_handler(:game_end,  method(:command_game_end))
    @command_window.set_handler(:cancel,    method(:return_scene))
  end
end[/pre]

点评

_(:з」∠)_虽然已经解决了 还是感谢  发表于 2015-6-18 18:55

评分

参与人数 2星屑 +100 梦石 +1 收起 理由
taroxd + 1 辛苦了
月华风 + 100 我很赞同

查看全部评分

回复

使用道具 举报

爪子

梦石
0
星屑
1678
在线时间
882 小时
注册时间
2014-8-28
回帖
1058
 楼主| 发表于 2015-7-17 23:04:33 | 显示全部楼层
cinderelmini 发表于 2015-6-17 20:58
脚本在这

用法是Main前Insert,然后打开数据库把“用语”页的等级文字“Lv.”改成“年龄:” ...

1.png
这样子改好了,
但是还是用物品立绘就会消失。。

点评

啊。已经找到问题了。。不关Scene的事情。。。  发表于 2015-7-17 23:50
Scene的脚本~  发表于 2015-7-17 23:41
如果不是viewport的问题。。。想不出是什么其他的原因。。。是使用了道具之后,还是刚按下道具?可以的话球个脚本~  发表于 2015-7-17 23:40
个人坑《凝聚的祈愿》更新日记
网瘾少女的领域-Lofter
一时骂人一时爽,一直骂人一直爽^o^
回复

使用道具 举报

梦石
0
星屑
9716
在线时间
2775 小时
注册时间
2008-9-5
回帖
3458

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

发表于 2015-7-17 23:55:32 | 显示全部楼层
莫言别离 发表于 2015-7-17 23:04
这样子改好了,
但是还是用物品立绘就会消失。。

因为物品使用的时候选择对象的窗口是菜单状态栏窗口的子类……所以…………
总之刷新这个子窗口的时候把父类也刷新了,但是不知道为什么单纯clear却不再显示了…………
解决方法:
点击展开/收起class Window_MenuActor < Window_MenuStatus
  alias c_150717_init initialize
  def initialize
    c_150717_init
    @image.visible = false
  end
  
  def refresh
    c_150617_refresh
  end
  
end

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

点评

搞定了,万分感谢~!  发表于 2015-7-18 08:55
突然发现正好是一个月前?  发表于 2015-7-17 23:56

评分

参与人数 1星屑 +60 收起 理由
莫言别离 + 60

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部