Project1

标题: 关于特定物品的选择。 [打印本页]

作者: yzlsym    时间: 2008-4-6 16:04
标题: 关于特定物品的选择。
这个难度大概属于中高了吧。。。琢磨了半天还是没有头绪,只好求助。
效果是:跳转到物品栏,选择带有某种特定属性物品,而不含这种属性的物品将不会被显示,选择后1个变量等于这个物品(这个倒会),还要考虑物品数量减少。
作者: 禾西    时间: 2008-4-6 16:25
掩飾錯誤......
作者: yzlsym    时间: 2008-4-6 16:27
你误解了。。
是在其他场合打开物品栏选择,然后用变量等于物品。
作者: 禾西    时间: 2008-4-6 16:33
哦哦哦,禾西果然是漢語白痴!
所以說需要窗口的配合嗎?
然後把選擇的物品和數量記錄起來,以後調用?
作者: yzlsym    时间: 2008-4-6 16:37
Orz。。。。
说白了吧。。我是想应用在装备打造界面中的材料选择项上。
选择“材料选择”后调出物品栏,只有含有“材料”属性的物品会显示出来,选择后描绘出物品的名称,并且一个变量等于选择的物品以使用hash表制作材料属性。
作者: 禾西    时间: 2008-4-6 16:52
ah ha,明白了=3=
禾西寫過的魔石窗口就是這個樣子的。
大致上需要寫以下幾個東西
Window_***(模仿Window_Item)

Scene_***(模仿Window__ShopBuy)
Help_***(模仿水版的詳細物品介紹腳本)

記錄調用有 變量 = ??即可。

[LINE]1,#dddddd[/LINE]
我知道很難理解……但是太多東西很難一次說清楚……
總之你先要模仿Window_Item寫出一個可供選擇的窗口先
作者: yzlsym    时间: 2008-4-6 16:56
膜拜。。。
我的确有写Window_Base、Window_Build、Scene_Build。。。。。
我原来按你的方法试过的,没头绪。。默默。。。
再试下吧!也麻烦你准备下。。。想不出后还是得看你。。
作者: 禾西    时间: 2008-4-6 17:07
可以給個模板你:
  1. #==============================================================================
  2. # ■ Window_Item
  3. #------------------------------------------------------------------------------
  4. #  物品画面、战斗画面、显示浏览物品的窗口。
  5. #==============================================================================

  6. class Window_Item_Build < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 64, 640, 416)
  12.     @column_max = 2
  13.     refresh
  14.     self.index = 0
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 获取物品
  18.   #--------------------------------------------------------------------------
  19.   def item
  20.     return @data[self.index]
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 刷新
  24.   #--------------------------------------------------------------------------
  25.   def refresh
  26.     if self.contents != nil
  27.       self.contents.dispose
  28.       self.contents = nil
  29.     end
  30.     @data = []
  31.     # 添加报务
  32.     for i in 1...$data_items.size
  33.       if $game_party.item_number(i) > 0
  34.         @data.push($data_items[i])
  35.       end
  36.     end
  37.     for i in 1...$data_weapons.size
  38.       if $game_party.weapon_number(i) > 0
  39.         @data.push($data_weapons[i])
  40.       end
  41.     end
  42.     for i in 1...$data_armors.size
  43.       if $game_party.armor_number(i) > 0
  44.         @data.push($data_armors[i])
  45.       end
  46.     end
  47.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  48.     @item_max = @data.size
  49.     if @item_max > 0
  50.       self.contents = Bitmap.new(width - 32, row_max * 32)
  51.       @data.each {|i| draw_item(i)}
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 描绘项目
  56.   #     index : 项目编号
  57.   #--------------------------------------------------------------------------
  58.   def draw_item(index)
  59.     item = @data[index]
  60.     case item
  61.     when RPG::Item
  62.       number = $game_party.item_number(item.id)
  63.     when RPG::Weapon
  64.       number = $game_party.weapon_number(item.id)
  65.     when RPG::Armor
  66.       number = $game_party.armor_number(item.id)
  67.     end
  68.     if item.is_a?(RPG::Item) and
  69.        $game_party.item_can_use?(item.id)
  70.       self.contents.font.color = normal_color
  71.     else
  72.       self.contents.font.color = disabled_color
  73.     end
  74.     x = 4 + index % 2 * (288 + 32)
  75.     y = index / 2 * 32
  76.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  77.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  78.     bitmap = RPG::Cache.icon(item.icon_name)
  79.     opacity = self.contents.font.color == normal_color ? 255 : 128
  80.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  81.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  82.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  83.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 刷新帮助文本
  87.   #--------------------------------------------------------------------------
  88.   def update_help
  89.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  90.   end
  91. end
  92. #==============================================================================
  93. # ■ Scene_Base
  94. #------------------------------------------------------------------------------
  95. #  模仿 VX 寫的游戲界面超級類(偷懶用)
  96. #==============================================================================
  97. class Scene_Base
  98.   #--------------------------------------------------------------------------
  99.   # ● 主處理
  100.   #--------------------------------------------------------------------------
  101.   def main
  102.     window_create       #生成窗口
  103.     Graphics.transition #執行過渡
  104.     loop_do             #主循環
  105.     Graphics.freeze     #準備過渡
  106.     window_dispose      #釋放窗口
  107.     background_dispose  #背景釋放
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 主循環
  111.   #--------------------------------------------------------------------------
  112.   def loop_do
  113.     loop do
  114.       Graphics.update   #刷新「游戏畫面」
  115.       Input.update      #刷新「輸入信息」
  116.       update            #刷新畫面
  117.       background_update #背景刷新
  118.       
  119.       #如果切換畫面就中斷循環
  120.       break if $scene != self
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 生成主要窗口
  125.   #--------------------------------------------------------------------------
  126.   def window_create
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 刷新畫面
  130.   #--------------------------------------------------------------------------
  131.   def update
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 釋放窗口
  135.   #--------------------------------------------------------------------------
  136.   def window_dispose
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 背景刷新
  140.   #--------------------------------------------------------------------------
  141.   def background_update
  142.     @background.update unless @background.nil?
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 背景釋放
  146.   #--------------------------------------------------------------------------
  147.   def background_dispose
  148.     @background.dispose unless @background.nil?
  149.   end
  150. end
  151. #==============================================================================
  152. # ■ Scene_Base
  153. #------------------------------------------------------------------------------
  154. #  游戲界面的子類版(偷懶用)
  155. #==============================================================================
  156. class SupScene < Scene_Base
  157.   #--------------------------------------------------------------------------
  158.   # ● 主處理
  159.   #--------------------------------------------------------------------------
  160.   def main
  161.     super
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 生成主要窗口
  165.   #--------------------------------------------------------------------------
  166.   def window_create
  167.     @window_item = Window_Item_Build.new
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 釋放窗口
  171.   #--------------------------------------------------------------------------
  172.   def window_dispose
  173.     @window_item.dispose
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 刷新畫面
  177.   #--------------------------------------------------------------------------
  178.   def update
  179.     if @window_item.active
  180.       update_item
  181.       return
  182.     end
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 刷新畫面(update_item)
  186.   #--------------------------------------------------------------------------
  187.   def update_item
  188.   end
  189. end
复制代码


作者: 0飘絮0    时间: 2008-4-6 20:04
不知道LZ解决了没。禾西的应该可以了吧。
我顺便说句,你自己已经知道怎么建造系统,只是限制物品选择没搞定。
Window_Item 里的类似此类:添加限制,不知道可以不
for i in 1...$data_weapons.size
      #如果武器的数量大于0并且包含15号属性,则……
    if $game_party.weapon_number(i) > 0 and $data_weapons.element_set.include?(15)
       @data.push($data_weapons)
    end
end






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