Project1

标题: 物品分类 [打印本页]

作者: scgjgj999    时间: 2014-7-20 10:24
标题: 物品分类
本帖最后由 RyanBern 于 2014-7-20 15:11 编辑

最近在做物品分类时出现了一个问题,就是想把防具和装饰品分开,但怎么做都做不出来,大侠麻烦来帮个忙。
附脚本:
  1. #==============================================================================
  2. # ■ Window_ItemTitle
  3. #------------------------------------------------------------------------------
  4. #  选择类别
  5. #==============================================================================
  6. class Window_ItemTitle < Window_Base  #"使用物品"四个字的窗口
  7.   def initialize
  8.     super(0, 0, 160, 64)
  9.     self.contents = Bitmap.new(width - 32, height - 32)
  10.     self.contents.clear
  11.     self.contents.font.color = Color.new(189, 183, 103, 200)
  12.     self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  13.   end
  14. end

  15. class Window_ItemCommand < Window_Selectable
  16.   
  17. #———— 初始化 ————
  18.   def initialize
  19.     super(0, 64, 160, 352)
  20.     self.contents = Bitmap.new(width - 32, height - 32)
  21.     @item_max = 5
  22.    
  23.     @commands = [" 恢 复 用 品", " 武       器", " 防 具 辅 助", " 材       料", " 不 明 物 品"]
  24.     refresh
  25.     self.index = 0
  26.   end
  27.   
  28. #———— 刷新 ————
  29.   def refresh  
  30.     self.contents.clear
  31.     for i in 0...@item_max
  32.     draw_item(i, normal_color)
  33.     end
  34.   end

  35. #—— 描绘项目 ——| index:编号,color:颜色——————
  36.   def draw_item(index, color)
  37.     self.contents.font.color = color
  38.     y = index * 32
  39.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  40.   end
  41. #—— 帮助部分更新 ————
  42.   def update_help
  43.     case self.index
  44.     when 0
  45.       @text = @commands[0]
  46.     when 1
  47.       @text = @commands[1]
  48.     when 2
  49.       @text = @commands[2]
  50.     when 3
  51.       @text = @commands[3]
  52.     when 4
  53.       @text = @commands[4]
  54.     end
  55.     @help_window.set_text(@text)
  56.   end
  57.   
  58. end  # Window_ItemCommand的



  59. #==============================================================================
  60. # ■ Window_ItemCommand
  61. #------------------------------------------------------------------------------
  62. #  选择类别
  63. #==============================================================================

  64. #==============================================================================
  65. # ■ Window_ItemList
  66. #------------------------------------------------------------------------------
  67. #  物品窗口。 item.variance是物品的"分散度",借来用做分类
  68. #==============================================================================

  69. class Window_ItemList < Window_Selectable

  70. #———— 初始化 ————
  71.   def initialize
  72.     super(160, 0, 480, 416)
  73.     refresh
  74.     self.index = 0
  75.   end

  76. #—— 取得现在选择的物品 ——
  77.   def item
  78.     return @data[self.index]
  79.   end
  80.   
  81. #—— 刷新 ———
  82.   def refresh
  83.     if self.contents != nil
  84.       self.contents.dispose
  85.       self.contents = nil
  86.     end
  87.     @data = []
  88.   end
  89.   
  90.   
  91. #—— 设置不同类别的物品 ———
  92.   def set_item(command)
  93.     refresh
  94.     #—— 根据现在的选项决定物品 ——
  95.     case command  
  96.     when 0            #恢复类,分散度为0
  97.       for i in 1...$data_items.size
  98.         if ($data_items[i].variance == 0 and $game_party.item_number(i) > 0)
  99.           @data.push($data_items[i])
  100.         end
  101.       end
  102.     when 1            #武器类:
  103.       for i in 1...$game_party.weapons.size
  104.         if $game_party.weapons[i] != nil
  105.           @data.push($game_party.weapons[i]) if ! $game_party.weapons[i].equiping
  106.         end
  107.       end
  108.     when 2            #防具辅助类
  109.       for i in 1...$game_party.armors.size
  110.         if $game_party.armors[i] != nil
  111.           @data.push($game_party.armors[i]) if ! $game_party.armors[i].equiping
  112.         end
  113.       end
  114.     when 3            #材料
  115.       for i in 1...$data_items.size
  116.         if ($data_items[i].variance == 6 and $game_party.item_number(i) > 0)
  117.           @data.push($data_items[i])
  118.         end
  119.       end
  120.     when 4            #不明物品类:分散度为5
  121.       for i in 1...$data_items.size
  122.         if ($data_items[i].variance == 5 and $game_party.item_number(i) > 0)
  123.           @data.push($data_items[i])
  124.         end
  125.       end
  126.     end

  127.     @item_max = @data.size  
  128.     if @item_max > 0
  129.       self.contents = Bitmap.new(width - 32, row_max * 32)
  130.       self.contents.clear
  131.       for i in 0...@item_max
  132.         draw_item(i)
  133.       end
  134.     end
  135.   end

  136. #——— 单类物品的个数 ————
  137.   def item_number
  138.     return @item_max
  139.   end
  140.   
  141.   
  142. #——— 项目内容的描画 ————
  143.   def draw_item(index)
  144.     item = @data[index]  
  145.     #—— 取得具体物品数量 ——
  146.     case item   
  147.     when RPG::Item
  148.       number = $game_party.item_number(item.id)
  149.     when RPG::Weapon
  150.       number = $game_party.weapon_number(item.id)
  151.     when RPG::Armor
  152.       number = $game_party.armor_number(item.id)
  153.     end
  154.    
  155.     #—— 给出物品的颜色 ——
  156.     if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
  157.       self.contents.font.color = normal_color
  158.     else
  159.       self.contents.font.color = Color.new(153, 153, 153, 220)
  160.     end
  161.    
  162.     #—— 描绘物体图标、物体名、数量 ——
  163.     x = 4
  164.     y = index * 32
  165.     bitmap = RPG::Cache.icon(item.icon_name)
  166.     opacity = self.contents.font.color == normal_color ? 255 : 128
  167.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  168.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  169.     self.contents.draw_text(x + 400, y, 16, 32, ":", 1)
  170.     self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  171.   end
  172.   
  173. #——— 更新帮助窗口 ————
  174.   def update_help
  175.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  176.   end

  177. end #—— Window_ItemList 的 ——
复制代码
我试过用 .kind 进行分解,但是分解开以后不报错,分类里也显示不出任何防具和装饰品,试了好几种方法,结果都是无法显示出防具和饰品,有点晕了,求大侠出来帮忙解释下,谢谢了~~~~~~~~
作者: 恐惧剑刃    时间: 2014-7-20 10:37
本帖最后由 恐惧剑刃 于 2014-7-20 11:19 编辑


现在试试呢?
推荐看看癫狂侠客的录像
  1. #==============================================================================
  2. # ■ Window_ItemTitle
  3. #------------------------------------------------------------------------------
  4. #  选择类别
  5. #==============================================================================
  6. class Window_ItemTitle < Window_Base  #"使用物品"四个字的窗口
  7.   def initialize
  8.     super(0, 0, 160, 64)
  9.     self.contents = Bitmap.new(width - 32, height - 32)
  10.     self.contents.clear
  11.     self.contents.font.color = Color.new(189, 183, 103, 200)
  12.     self.contents.draw_text(4, 0, 120, 32, "使用"<<$data_system.words.item, 1)  # 改

  13.   end
  14. end

  15. class Window_ItemCommand < Window_Selectable
  16.   
  17. #———— 初始化 ————
  18.   def initialize
  19.     super(0, 64, 160, 352)
  20.     self.contents = Bitmap.new(width - 32, height - 32)
  21.     @item_max = 5
  22.    
  23.     @commands = [" 恢 复 用 品", " 武       器", " 防 具 辅 助", " 材       料", " 不 明 物 品"]
  24.     refresh
  25.     self.index = 0
  26.   end
  27.   
  28. #———— 刷新 ————
  29.   def refresh  
  30.     self.contents.clear
  31.     for i in 0...@item_max
  32.     draw_item(i, normal_color)
  33.     end
  34.   end

  35. #—— 描绘项目 ——| index:编号,color:颜色——————
  36.   def draw_item(index, color)
  37.     self.contents.font.color = color
  38.     y = index * 32
  39.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  40.   end
  41. #—— 帮助部分更新 ———— 改
  42.   def update_help
  43.     @help_window.set_text(@commands[self.index])
  44.   end
  45.   
  46. end  # Window_ItemCommand的



  47. #==============================================================================
  48. # ■ Window_ItemCommand
  49. #------------------------------------------------------------------------------
  50. #  选择类别
  51. #==============================================================================

  52. #==============================================================================
  53. # ■ Window_ItemList
  54. #------------------------------------------------------------------------------
  55. #  物品窗口。 item.variance是物品的"分散度",借来用做分类
  56. #==============================================================================

  57. class Window_ItemList < Window_Selectable

  58. #———— 初始化 ————
  59.   def initialize
  60.     super(160, 0, 480, 416)
  61.     refresh
  62.     self.index = -1     # 改
  63.     self.active = false  # 改
  64.   end

  65. #—— 取得现在选择的物品 ——
  66.   def item
  67.     return @data[self.index]
  68.   end
  69.   
  70. #—— 刷新 ———
  71.   def refresh
  72.     if self.contents != nil
  73.       self.contents.dispose
  74.       self.contents = nil
  75.     end
  76.     @data = []
  77.   end
  78.   
  79.   
  80. #—— 设置不同类别的物品 ———
  81.   def set_item(command)
  82.     refresh
  83.     #—— 根据现在的选项决定物品 ——
  84.     case command  
  85.     when 0            #恢复类,分散度为0   改
  86.       for i in 1...$data_items.size
  87.         if ($data_items[i].variance == 0 and $game_party.item_number(i) > 0)
  88.           @data.push($data_items[i])
  89.         end
  90.       end
  91.     when 1            #武器类:   改
  92.       for i in 1...$data_weapons.size
  93.         if $game_party.weapon_number(i) > 0
  94.           @data.push($data_weapons[i])# if ! $game_party.weapons.equiping
  95.         end
  96.       end
  97.     when 2            #防具辅助类   改
  98.       for i in 1...$data_armors.size
  99.         if $game_party.armor_number(i) > 0
  100.          
  101.           # 这样分歧
  102.           case $data_armors[i].kind
  103.           when 2
  104.           when 3
  105.           end
  106.          
  107.           @data.push($data_armors[i])# if ! $game_party.armors.equiping
  108.         end
  109.       end
  110.     when 3            #材料   改
  111.       for i in 1...$data_items.size
  112.         if ($data_items[i].variance == 6 and $game_party.item_number(i) > 0)
  113.           @data.push($data_items[i])
  114.         end
  115.       end
  116.     when 4            #不明物品类:分散度为5  改
  117.       for i in 1...$data_items.size
  118.         if ($data_items[i].variance == 5 and $game_party.item_number(i) > 0)
  119.           @data.push($data_items[i])
  120.         end
  121.       end
  122.     end

  123.     @item_max = @data.size  
  124.     if @item_max > 0
  125.       self.contents = Bitmap.new(width - 32, row_max * 32)
  126.       self.contents.clear
  127.       for i in 0...@item_max
  128.         draw_item(i)
  129.       end
  130.     end
  131.   end

  132. #——— 单类物品的个数 ————   改
  133.   #def item_number
  134.     #return @item_max
  135.   #end
  136.   
  137.   
  138. #——— 项目内容的描画 ————
  139.   def draw_item(index)
  140.     item = @data[index]  
  141.     #—— 取得具体物品数量 ——
  142.     case item   
  143.     when RPG::Item
  144.       number = $game_party.item_number(item.id)
  145.     when RPG::Weapon
  146.       number = $game_party.weapon_number(item.id)
  147.     when RPG::Armor
  148.       number = $game_party.armor_number(item.id)
  149.     end
  150.    
  151.     #—— 给出物品的颜色 ——
  152.     if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
  153.       self.contents.font.color = normal_color
  154.     else
  155.       self.contents.font.color = Color.new(153, 153, 153, 220)
  156.     end
  157.    
  158.     #—— 描绘物体图标、物体名、数量 ——
  159.     x = 4
  160.     y = index * 32
  161.     bitmap = RPG::Cache.icon(item.icon_name)
  162.     opacity = self.contents.font.color == normal_color ? 255 : 128
  163.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  164.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  165.     self.contents.draw_text(x + 400, y, 16, 32, ":", 1)
  166.     self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  167.   end
  168.   
  169. #——— 更新帮助窗口 ————  改
  170.   def update_help
  171.     @help_window.set_text(@data[self.index] == nil ? "" : @data[self.index].description)
  172.   end

  173. end #—— Window_ItemList 的 ——

复制代码

作者: 芯☆淡茹水    时间: 2014-7-20 15:07

  1. #多增加一个分歧,分别添加 防具 和 饰品 。
  2. when 2            #防具类
  3.   for i in 1...$game_party.armors.size
  4.     armor = $game_party.armors[i]
  5.     if armor != nil
  6.       unless armor.equiping
  7.         @data.push(armor) if [0,1,2].include?(armor.kind)
  8.       end
  9.     end
  10.   end
  11. when 3            #饰品类
  12.   for i in 1...$game_party.armors.size
  13.     armor = $game_party.armors[i]
  14.     if armor != nil
  15.       unless armor.equiping
  16.         @data.push(armor) if armor.kind == 3
  17.       end
  18.     end
  19.   end
  20.   
  21. # 下面的就依次: when 4   when 5  ,,,,,,,,
复制代码

作者: scgjgj999    时间: 2014-7-20 17:07
好的,下次我注意,谢谢提醒~{:2_282:}




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