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

Project1

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

[已经解决] 请高手解决下物品栏的显示问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
跳转到指定楼层
1
发表于 2011-1-27 19:40:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zxc3824 于 2011-1-29 11:31 编辑

脚本盲,搜了很久都无法解决。

我改了一下坐标和大小,就发现了这么个问题:


装备栏就是这样,我要装备傲天剑

结果装备的是太极剑


怎么办?这是物品栏的脚本:window_item
  1. #==============================================================================
  2. # ■ Window_Item
  3. #------------------------------------------------------------------------------
  4. #  物品画面、战斗画面、显示浏览物品的窗口。
  5. #==============================================================================

  6. class Window_Item < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(320, 0, 320, 160)
  12.     @column_max = 1
  13.     refresh
  14.     self.index = 0
  15.     # 战斗中的情况下将窗口移至中央并将其半透明化
  16.     if $game_temp.in_battle
  17.       self.y = 64
  18.       self.height = 256
  19.       self.back_opacity = 160
  20.     end
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 获取物品
  24.   #--------------------------------------------------------------------------
  25.   def item
  26.     return @data[self.index]
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 刷新
  30.   #--------------------------------------------------------------------------
  31.   def refresh
  32.     if self.contents != nil
  33.       self.contents.dispose
  34.       self.contents = nil
  35.     end
  36.     @data = []
  37.     # 添加报务
  38.     for i in 1...$data_items.size
  39.       if $game_party.item_number(i) > 0
  40.         @data.push($data_items[i])
  41.       end
  42.     end
  43.     # 在战斗中以外添加武器、防具
  44.     unless $game_temp.in_battle
  45.       for i in 1...$data_weapons.size
  46.         if $game_party.weapon_number(i) > 0
  47.           @data.push($data_weapons[i])
  48.         end
  49.       end
  50.       for i in 1...$data_armors.size
  51.         if $game_party.armor_number(i) > 0
  52.           @data.push($data_armors[i])
  53.         end
  54.       end
  55.     end
  56.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  57.     @item_max = @data.size
  58.     if @item_max > 0
  59.       self.contents = Bitmap.new(width - 32, row_max * 32)
  60.       for i in 0...@item_max
  61.         draw_item(i)
  62.       end
  63.     end
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 描绘项目
  67.   #     index : 项目编号
  68.   #--------------------------------------------------------------------------
  69.   def draw_item(index)
  70.     item = @data[index]
  71.     case item
  72.     when RPG::Item
  73.       number = $game_party.item_number(item.id)
  74.     when RPG::Weapon
  75.       number = $game_party.weapon_number(item.id)
  76.     when RPG::Armor
  77.       number = $game_party.armor_number(item.id)
  78.     end
  79.     if item.is_a?(RPG::Item) and
  80.        $game_party.item_can_use?(item.id)
  81.       self.contents.font.color = normal_color
  82.     else
  83.       self.contents.font.color = disabled_color
  84.     end
  85.     x = 4 + index % 2 * (288 + 32)
  86.     y = index / 2 * 32
  87.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  88.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  89.     bitmap = RPG::Cache.icon(item.icon_name)
  90.     opacity = self.contents.font.color == normal_color ? 255 : 128
  91.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  92.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  93.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  94.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 刷新帮助文本
  98.   #--------------------------------------------------------------------------
  99.   def update_help
  100.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  101.   end
  102. end
复制代码
不用上工程了,只是改变一下窗口显示。其他的都是默认脚本。系统要保密的{:nm_2:}

算了,为了解决得好点,让人盗工程把。
这是WINDOW_HELP2的
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。(正常状态)
  5. #==============================================================================

  6. class Window_Help2 < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(320, 160, 320, 128)
  12.     self.contents = Bitmap.new(width - 32, height - 32)
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 设置文本
  16.   #     text  : 窗口显示的字符串
  17.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  18.   #--------------------------------------------------------------------------
  19. def set_text(text, align = 0)
  20.     # 如果文本和对齐方式的至少一方与上次的不同
  21.     if text != @text or align != @align
  22.       # 再描绘文本
  23.       self.contents.clear
  24.       self.contents.font.color = text_color(8)
  25.       text_size = 36
  26.       # 判断行数  22号字体,640长度,用70字节,但为保证不出问题,用60字节
  27.       line = text.size / text_size + 1
  28.       loop do
  29.         if line * text_size > text.size
  30.           text += " "
  31.         else
  32.           break
  33.         end
  34.       end
  35.       text_arr = []
  36.       for i in 0...line
  37.         text_arr.push(text[i*text_size...(i+1)*text_size])
  38.       end
  39.       for i in 0...text_arr.size
  40.          text_arr[i].size
  41.         self.contents.draw_text(4, i*32, self.width , 32, text_arr[i], align)
  42.       end
  43.       @text = text
  44.       @align = align
  45.       @actor = nil
  46.     end
  47.     self.visible = true
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 设置角色
  51.   #     actor : 要显示状态的角色
  52.   #--------------------------------------------------------------------------
  53.   def set_actor(actor)
  54.     if actor != @actor
  55.       self.contents.clear
  56.       draw_actor_name(actor, 4, 0)
  57.       draw_actor_state(actor, 140, 0)
  58.       draw_actor_hp(actor, 284, 0)
  59.       draw_actor_sp(actor, 460, 0)
  60.       @actor = actor
  61.       @text = nil
  62.       self.visible = true
  63.     end
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 设置敌人
  67.   #     enemy : 要显示名字和状态的敌人
  68.   #--------------------------------------------------------------------------
  69.   def set_enemy(enemy)
  70.     text = enemy.name
  71.     state_text = make_battler_state_text(enemy, 112, false)
  72.     if state_text != ""
  73.       text += "  " + state_text
  74.     end
  75.     set_text(text, 1)
  76.   end
  77. end
复制代码
这是Scene_Item的
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================

  6. class Scene_Item
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成帮助窗口、物品窗口
  12.     @help_window = Window_Help2.new
  13.     @item_window = Window_Item.new
  14.     # 关联帮助窗口
  15.     @item_window.help_window = @help_window
  16.     # 生成目标窗口 (设置为不可见・不活动)
  17.     @target_window = Window_Target.new
  18.     @target_window.visible = false
  19.     @target_window.active = false
  20.     @equip_window = Window_Equip.new # 新增
  21.     # 执行过度
  22.     Graphics.transition
  23.     # 主循环
  24.     loop do
  25.       # 刷新游戏画面
  26.       Graphics.update
  27.       # 刷新输入信息
  28.       Input.update
  29.       # 刷新画面
  30.       update
  31.       # 如果画面切换就中断循环
  32.       if $scene != self
  33.         break
  34.       end
  35.     end
  36.     # 装备过渡
  37.     Graphics.freeze
  38.     # 释放窗口
  39.     @help_window.dispose
  40.     @item_window.dispose
  41.     @target_window.dispose
  42.     @equip_window.dispose # 新增
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 刷新画面
  46.   #--------------------------------------------------------------------------
  47.   def update
  48.     # 刷新窗口
  49.     @help_window.update
  50.     @item_window.update
  51.     @target_window.update
  52.     @equip_window.refresh # 新增
  53.     @equip_window.set_item(@item_window.item) # 新增
  54.     # 物品窗口被激活的情况下: 调用 update_item
  55.     if @item_window.active
  56.       update_item
  57.       return
  58.     end
  59.     # 目标窗口被激活的情况下: 调用 update_target
  60.     if @target_window.active
  61.       update_target
  62.       return
  63.     end
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 刷新画面 (物品窗口被激活的情况下)
  67.   #--------------------------------------------------------------------------
  68.   def update_item
  69.     # 按下 B 键的情况下
  70.     if Input.trigger?(Input::B)
  71.       # 演奏取消 SE
  72.       $game_system.se_play($data_system.cancel_se)
  73.       # 切换到菜单画面
  74.       $scene = Scene_Menu.new(0)
  75.       return
  76.     end
  77.     # 按下 C 键的情况下
  78.     if Input.trigger?(Input::C)
  79.       # 获取物品窗口当前选中的物品数据
  80.       @item = @item_window.item
  81.       # 不使用物品的情况下
  82.       unless @item.is_a?(RPG::Item)
  83.         # 演奏冻结 SE
  84.         $game_system.se_play($data_system.buzzer_se)
  85.         return
  86.       end
  87.       # 不能使用的情况下
  88.       unless $game_party.item_can_use?(@item.id)
  89.         # 演奏冻结 SE
  90.         $game_system.se_play($data_system.buzzer_se)
  91.         return
  92.       end
  93.       # 演奏确定 SE
  94.       $game_system.se_play($data_system.decision_se)
  95.       # 效果范围是我方的情况下
  96.       if @item.scope >= 3
  97.         # 激活目标窗口
  98.         @item_window.active = false
  99.         @target_window.x = (@item_window.index + 1) % 2 * 304
  100.         @target_window.visible = true
  101.         @target_window.active = true
  102.         # 设置效果范围 (单体/全体) 的对应光标位置
  103.         if @item.scope == 4 || @item.scope == 6
  104.           @target_window.index = -1
  105.         else
  106.           @target_window.index = 0
  107.         end
  108.       # 效果在我方以外的情况下
  109.       else
  110.         # 公共事件 ID 有效的情况下
  111.         if @item.common_event_id > 0
  112.           # 预约调用公共事件
  113.           $game_temp.common_event_id = @item.common_event_id
  114.           # 演奏物品使用时的 SE
  115.           $game_system.se_play(@item.menu_se)
  116.           # 消耗品的情况下
  117.           if @item.consumable
  118.             # 使用的物品数减 1
  119.             $game_party.lose_item(@item.id, 1)
  120.             # 再描绘物品窗口的项目
  121.             @item_window.draw_item(@item_window.index)
  122.           end
  123.           # 切换到地图画面
  124.           $scene = Scene_Map.new
  125.           return
  126.         end
  127.       end
  128.       return
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 刷新画面 (目标窗口被激活的情况下)
  133.   #--------------------------------------------------------------------------
  134.   def update_target
  135.     # 按下 B 键的情况下
  136.     if Input.trigger?(Input::B)
  137.       # 演奏取消 SE
  138.       $game_system.se_play($data_system.cancel_se)
  139.       # 由于物品用完而不能使用的场合
  140.       unless $game_party.item_can_use?(@item.id)
  141.         # 再次生成物品窗口的内容
  142.         @item_window.refresh
  143.       end
  144.       # 删除目标窗口
  145.       @item_window.active = true
  146.       @target_window.visible = false
  147.       @target_window.active = false
  148.       return
  149.     end
  150.     # 按下 C 键的情况下
  151.     if Input.trigger?(Input::C)
  152.       # 如果物品用完的情况下
  153.       if $game_party.item_number(@item.id) == 0
  154.         # 演奏冻结 SE
  155.         $game_system.se_play($data_system.buzzer_se)
  156.         return
  157.       end
  158.       # 目标是全体的情况下
  159.       if @target_window.index == -1
  160.         # 对同伴全体应用物品使用效果
  161.         used = false
  162.         for i in $game_party.actors
  163.           used |= i.item_effect(@item)
  164.         end
  165.       end
  166.       # 目标是单体的情况下
  167.       if @target_window.index >= 0
  168.         # 对目标角色应用物品的使用效果
  169.         target = $game_party.actors[@target_window.index]
  170.         used = target.item_effect(@item)
  171.       end
  172.       # 使用物品的情况下
  173.       if used
  174.         # 演奏物品使用时的 SE
  175.         $game_system.se_play(@item.menu_se)
  176.         # 消耗品的情况下
  177.         if @item.consumable
  178.           # 使用的物品数减 1
  179.           $game_party.lose_item(@item.id, 1)
  180.           # 再描绘物品窗口的项目
  181.           @item_window.draw_item(@item_window.index)
  182.         end
  183.         # 再生成目标窗口的内容
  184.         @target_window.refresh
  185.         # 全灭的情况下
  186.         if $game_party.all_dead?
  187.           # 切换到游戏结束画面
  188.           $scene = Scene_Gameover.new
  189.           return
  190.         end
  191.         # 公共事件 ID 有效的情况下
  192.         if @item.common_event_id > 0
  193.           # 预约调用公共事件
  194.           $game_temp.common_event_id = @item.common_event_id
  195.           # 切换到地图画面
  196.           $scene = Scene_Map.new
  197.           return
  198.         end
  199.       end
  200.       # 无法使用物品的情况下
  201.       unless used
  202.         # 演奏冻结 SE
  203.         $game_system.se_play($data_system.buzzer_se)
  204.       end
  205.       return
  206.     end
  207.   end
  208. end
复制代码

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
2
发表于 2011-1-27 19:45:32 | 只看该作者
注意了,物品栏的问题可以有无数种,
不是把问题说成自己时脚本盲就可以的,
详细说问题,可以?
最好贴图~就酱~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
3
 楼主| 发表于 2011-1-27 19:53:52 | 只看该作者
回复 银·乌尔 的帖子

问题就是显示不对的问题,我要一页显示4个,但是改了大小以后显示就乱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
4
发表于 2011-1-27 20:04:22 | 只看该作者
你贴上来的脚本:
86-87行:
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
改成:
x = 4 + index * (288 + 32)
y = index * 32
就可以了


点评

晕死,86 87行的2改成1就解决了。但是鼠标的却不能自动拉下去,请高手再解决下吧。  发表于 2011-1-29 11:38
我设置成高度160 正好是4*32+32啊  发表于 2011-1-29 11:33
补充一下,道具窗口的高度最好设置为(显示的物品数目*32+32)这个值. 就不会有那两个白白的上下箭头了.  发表于 2011-1-27 20:07

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
5
发表于 2011-1-28 08:35:54 | 只看该作者
去除86行的% 2
和87行的/2
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42344
在线时间
7599 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

6
发表于 2011-1-28 08:50:35 | 只看该作者
回复 银·乌尔 的帖子

表示这里根本没有问题,问题关键在Scene里,他不发就没办法了.

点评

注意审题,那不是LZ问的,他问的是换装问题  发表于 2011-1-28 13:09
不可能根本没问题的,如果%2和/2这两个不去除,显示的物品名字还是原来的样式,左右排列,而光标却是按纵向移动的.  发表于 2011-1-28 13:07
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
7
发表于 2011-1-28 13:18:21 | 只看该作者
回复 fux2 的帖子

没错啊,仔细看图片,傲天剑的注释是太极剑的,
说明只是显示的部分出了问题,
其实当光标停在傲天剑的时候,那个位置显示的应该是太极剑来的.

点评

话说,在4楼已经完成了这个问题~  发表于 2011-1-28 13:28
咱没仔细看,那么这一题就交给银了XD  发表于 2011-1-28 13:22
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
8
 楼主| 发表于 2011-1-29 11:27:13 | 只看该作者
回复 银·乌尔 的帖子

还是不行啊

改了以后还是这样








zxc3824于2011-1-29 11:38补充以下内容:
晕死,86 87行的2改成1就解决了。但是鼠标的却不能自动拉下去,请高手再解决下吧。

点评

本问题已经解决,现在工程不在机子上,下次再发帖!!!  发表于 2011-1-29 14:46
可能关系到显示行数什么的问题了, 没有工程表示压力山大~  发表于 2011-1-29 13:11
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 16:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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