Project1

标题: 关于人物选择窗口的脚本问题? [打印本页]

作者: 狼人弟弟    时间: 2016-5-2 14:15
标题: 关于人物选择窗口的脚本问题?
本帖最后由 狼人弟弟 于 2016-5-2 14:35 编辑

我在游戏的物品页面和技能页面设置了一个人物选择窗口(共用的),脚本名是“Window_MenuTarget”。(好吧,这个脚本是从别的游戏里提取过来的)
然后,我发现一个问题: 当我的队伍拥有4人以上时,就会出现如下面图片一样显示出“4个半”人。


本来吧,我以为通过修改这个窗口的高度把剩下的半个人去掉,但结果却变成了这样(5个人都挤成一团):


所以百试不得其解之下,我也只能厚颜无耻的上来求高手帮帮忙了。

那么,我的问题就是:   
该怎么把它设定为像下面这张图一样

这是通过安插在“Scene_ItemBase”的脚本获得的效果,但它只能编辑物品页面的人物选择窗口,却不能控制技能页面的人物窗口,请问该怎么修改呢?
安插在“Scene_ItemBase”的脚本如下:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成角色窗口【物品栏里的小头像使用者界面】
  3.   #--------------------------------------------------------------------------
  4.   def create_actor_window
  5.     @actor_window = Window_MenuTarget.new#Window_MenuActor.new
  6.     if SceneManager.scene.is_a?(Scene_Item)
  7.     #   @actor_window.y = 76          # 7
  8.        @actor_window.y -= 7          # 7
  9.        @actor_window.x = 4           # 4
  10.        @actor_window.height = 320  #342
  11.      end
  12.     @actor_window.set_handler(:ok,     method(:on_actor_ok))
  13.     @actor_window.set_handler(:cancel, method(:on_actor_cancel))
  14.     @actor_window.opacity = 255 #255
  15.   end




“Window_MenuTarget”的脚本如下:
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  物品/技能画面中,显示队伍成员状态的窗口
  6. #==============================================================================
  7.  
  8. class Window_MenuTarget < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对象 #    物品/技能画面的人物小头像区域
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(4 , 82, window_width, window_height - 100 )
  14.     self.visible = true #false   #判断是否直接显示
  15.     refresh
  16.   end
  17.  
  18.   #--------------------------------------------------------------------------
  19.   # ● 获取窗口的宽度
  20.   #--------------------------------------------------------------------------
  21.   def window_width
  22.       150
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取窗口的高度
  26.   #--------------------------------------------------------------------------
  27.   def window_height
  28.     390  # Graphics.height  #
  29.     end
  30.   #--------------------------------------------------------------------------
  31.   # ● 获取项目数
  32.   #--------------------------------------------------------------------------
  33.   def item_max
  34.     $game_party.members.size
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 获取列数
  38.   #--------------------------------------------------------------------------
  39.   def col_max
  40.     return 1
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 获取项目的高度
  44.   #--------------------------------------------------------------------------
  45.   def item_height
  46.     (height - standard_padding * 2) / 4
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 绘制项目
  50.   #--------------------------------------------------------------------------
  51.   def draw_item(index)
  52.     actor = $game_party.members[index]
  53.     enabled = $game_party.battle_members.include?(actor)
  54.     rect = item_rect(index)
  55.     dx = 96
  56.     m = 0.8
  57.     draw_actor_name(actor, rect.x + 32, rect.y * m + 8)
  58.     draw_actor_megaface(actor, rect.x + 2, rect.y * m + 8)
  59.     draw_actor_icons(actor, rect.x + 100, rect.y * m + 6)   #中毒等状态的图标
  60.     draw_actor_hp(actor, rect.x + 1 , rect.y * m + 28)#+ line_height / 2 + line_height )
  61.     draw_actor_mp(actor, rect.x + 1 , rect.y * m + 48)#+ line_height / 2 + line_height  + 16)
  62.   #  draw_actor_tp(actor, rect.x + 1 , rect.y * m + 56)#+ line_height / 2 + line_height  + 32)
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 按下确定键时的处理
  66.   #--------------------------------------------------------------------------
  67.   def process_ok
  68.     $game_party.target_actor = $game_party.members[index] unless @cursor_all
  69.     call_ok_handler
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 返回上一个选择的位置
  73.   #--------------------------------------------------------------------------
  74.   def select_last
  75.     select($game_party.menu_actor.index || 0)
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 设置光标的选择位置/范围
  79.   #--------------------------------------------------------------------------
  80.   def select_for_item(item)
  81.     @item = item
  82.     @cursor_fix = item.for_user?
  83.     @cursor_all = item.for_all?
  84.     if @cursor_fix
  85.       select($game_party.menu_actor.index)
  86.     elsif @cursor_all
  87.       select(0)
  88.     else
  89.       select_last
  90.     end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 定义光标矩形
  94.   #--------------------------------------------------------------------------
  95.   def update_cursor
  96.     if @index < 0
  97.       self.cursor_rect.empty
  98.     else
  99.       ensure_cursor_visible
  100.       self.cursor_rect.set(0, @index * 72, 126, 77)   #(0, @index * 78 + 4, 126, 77)
  101.     end
  102.     if @item != nil
  103.     if @item.for_all?
  104.         self.cursor_rect.set(0, 0, 126, item_max * 78 )
  105.     end
  106.     end
  107.   end
  108. end

未命名.PNG (37.44 KB, 下载次数: 27)

未命名.PNG

作者: 喵呜喵5    时间: 2016-5-2 14:45
34 行,改成 4
作者: 狼人弟弟    时间: 2016-5-2 14:53
本帖最后由 狼人弟弟 于 2016-5-2 15:04 编辑
喵呜喵5 发表于 2016-5-2 14:45
34 行,改成 4


修改过,但那样如果只有三个人的时候,会出现错误。
我的主角只有一人,所以一开始的时候也只有一个角色而已。

我的设想是:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成角色窗口【物品栏里的小头像使用者界面】
  3.   #--------------------------------------------------------------------------
  4.   def create_actor_window
  5.     @actor_window = Window_MenuTarget.new#Window_MenuActor.new
  6.     if SceneManager.scene.is_a?(Scene_Item)
  7.     #   @actor_window.y = 76          # 7
  8.        @actor_window.y -= 7          # 7
  9.        @actor_window.x = 4           # 4
  10.        @actor_window.height = 320  #342
  11.      end
  12.     if SceneManager.scene.is_a?(Scene_skill)
  13.     #   @actor_window.y = 76          # 7
  14.        @actor_window.y -= 7          # 7
  15.        @actor_window.x = 4           # 4
  16.        @actor_window.height = 320  #342
  17.      end
  18.     @actor_window.set_handler(:ok,     method(:on_actor_ok))
  19.     @actor_window.set_handler(:cancel, method(:on_actor_cancel))
  20.     @actor_window.opacity = 255 #255
  21.   end


但是这样的格式是错误的,所以请问能怎么修改呢?
作者: 李牧羊    时间: 2016-5-2 17:21
你好!

  或许增设一个判断即可,但是在下也不清楚【判断队伍人员数目】的事件脚本,因此只能这么写了:

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获取项目数
  3.   #--------------------------------------------------------------------------
  4.   def item_max
  5.     if XXOO(队伍中有4人)
  6.    then
  7.    4
  8.     else
  9. $game_party.members.size
  10.     end
  11.   end











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