Project1

标题: 【仿VA任重而道远】选择物品的处理 [打印本页]

作者: 阿尔西斯的马甲    时间: 2012-1-17 17:47
标题: 【仿VA任重而道远】选择物品的处理
  1. class Interpreter
  2.   def command_320
  3.     if @parameters[1]=="选物品XP2VA"
  4.       @wait_count=2
  5.       $scene=Scene_ItemSelect.new
  6.     else
  7.       actor = $game_actors[@parameters[0]]
  8.       if actor != nil
  9.         actor.name = @parameters[1]
  10.       end
  11.       return true
  12.     end
  13.   end
  14. end
  15. class Window_ItemSelect < Window_Selectable
  16.   def initialize
  17.     super(0, 64, 640, 416)
  18.     @column_max = 2
  19.     refresh
  20.     self.index = 0
  21.     if $game_temp.in_battle
  22.       self.y = 64
  23.       self.height = 256
  24.       self.back_opacity = 160
  25.     end
  26.   end
  27.   def item
  28.     return @data[self.index]
  29.   end
  30.   def refresh
  31.     if self.contents != nil
  32.       self.contents.dispose
  33.       self.contents = nil
  34.     end
  35.     @data = []
  36.     for i in 1...$data_items.size
  37.       if $game_party.item_number(i) > 0
  38.         @data.push($data_items[i])
  39.       end
  40.     end
  41.     unless $game_temp.in_battle
  42.       for i in 1...$data_weapons.size
  43.         if $game_party.weapon_number(i) > 0
  44.           @data.push($data_weapons[i])
  45.         end
  46.       end
  47.       for i in 1...$data_armors.size
  48.         if $game_party.armor_number(i) > 0
  49.           @data.push($data_armors[i])
  50.         end
  51.       end
  52.     end
  53.     @item_max = @data.size
  54.     if @item_max > 0
  55.       self.contents = Bitmap.new(width - 32, row_max * 32)
  56.       for i in 0...@item_max
  57.         draw_item(i)
  58.       end
  59.     end
  60.   end
  61.   def draw_item(index)
  62.     item = @data[index]
  63.     case item
  64.     when RPG::Item
  65.       number = $game_party.item_number(item.id)
  66.     when RPG::Weapon
  67.       number = $game_party.weapon_number(item.id)
  68.     when RPG::Armor
  69.       number = $game_party.armor_number(item.id)
  70.     end
  71.     self.contents.font.color = normal_color
  72.     x = 4 + index % 2 * (288 + 32)
  73.     y = index / 2 * 32
  74.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  75.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  76.     bitmap = RPG::Cache.icon(item.icon_name)
  77.     opacity = self.contents.font.color == normal_color ? 255 : 128
  78.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  79.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  80.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  81.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  82.   end
  83.   def update_help
  84.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  85.   end
  86. end
  87. class Scene_ItemSelect
  88.   def main
  89.     @spriteset = Spriteset_Map.new
  90.     @help_window = Window_Help.new
  91.     @help_window.opacity = 200
  92.     @item_window = Window_ItemSelect.new
  93.     @item_window.opacity = 200
  94.     @item_window.help_window = @help_window
  95.     @target_window = Window_Target.new
  96.     @target_window.visible = false
  97.     @target_window.active = false
  98.     Graphics.transition
  99.     loop do
  100.       Graphics.update
  101.       Input.update
  102.       update
  103.       if $scene != self
  104.         break
  105.       end
  106.     end
  107.     Graphics.freeze
  108.     @help_window.dispose
  109.     @item_window.dispose
  110.     @target_window.dispose
  111.     @spriteset.dispose
  112.   end
  113.   def update
  114.     @help_window.update
  115.     @item_window.update
  116.     @target_window.update
  117.     if @item_window.active
  118.       update_item
  119.       return
  120.     end
  121.     if @target_window.active
  122.       update_target
  123.       return
  124.     end
  125.   end
  126.   def update_item
  127.     if Input.trigger?(Input::B)
  128.       $scene = Scene_Map.new
  129.       return
  130.     end
  131.     if Input.trigger?(Input::C)
  132.       @item = @item_window.item
  133.       [email protected]
  134.       if @item.is_a?(RPG::Item)
  135.         $b=1
  136.       end
  137.       if @item.is_a?(RPG::Weapon)
  138.         $b=2
  139.       end
  140.       if @item.is_a?(RPG::Armor)
  141.         $b=3
  142.       end
  143.       $scene = Scene_Map.new
  144.       return
  145.     end
  146.    
  147.   end
  148.   def update_target
  149.     if Input.trigger?(Input::B)
  150.       if $game_party.item_number(@item.id) == 0
  151.         @item_window.refresh
  152.       end
  153.       @item_window.active = true
  154.       @target_window.visible = false
  155.       @target_window.active = false
  156.       return
  157.     end
  158.     if Input.trigger?(Input::C)
  159.       if $game_party.item_number(@item.id) == 0
  160.         return
  161.       end
  162.       [email protected]
  163.       if @item.is_a?(RPG::Item)
  164.         $b=1
  165.       end
  166.       if @item.is_a?(RPG::Weapon)
  167.         $b=2
  168.       end
  169.       if @item.is_a?(RPG::Armor)
  170.         $b=3
  171.       end
  172.       @target_window.refresh
  173.       if $game_party.all_dead?
  174.         $scene = Scene_Gameover.new
  175.         return
  176.       end
  177.       $scene = Scene_Map.new
  178.       return
  179.     end
  180.   end
  181. end
复制代码
如果要调用,请把任意一个角色的姓名改为“选物品XP2VA”(放心,不会真改的,只是这样输入事件)
然后就打开了窗口。选择物品后,物品ID被赋值给全局变量$a,物品类型赋值给$b。(1:物品2:武器3:防具)



自顶秒删


──阿尔西斯的马甲于2012-1-17 18:22补充内容:
作者: 越前リョーマ    时间: 2012-1-17 21:37
好独特的调用方式 = =
作者: 精灵使者    时间: 2012-1-18 22:38
可以用物品ID赋值给变量的用法。
我在《迷失之城》里面就用这个做面对角色使用物品




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