| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 989 |  
| 最后登录 | 2014-2-9 |  
| 在线时间 | 7 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间7 小时注册时间2007-6-28帖子84 | 
| 給你我的scene_item 參考.要準備"back0" "back1" "back2" 3張背景圖啊! 物品圖放於picture/item 文件夾內 
 
 #==============================================================================
 # ■ Window_Equip
 #------------------------------------------------------------------------------
 #  装备物品大图标显示。
 #==============================================================================
 
 class Window_Equip < Window_Base
 #--------------------------------------------------------------------------
 # ● 初始化对像
 #--------------------------------------------------------------------------
 def initialize
 super(-10, 88, 640, 480)
 @item = nil
 self.contents = Bitmap.new(width - 32, height - 32)
 self.opacity = 0
 refresh
 end
 #--------------------------------------------------------------------------
 # ● 刷新
 #--------------------------------------------------------------------------
 def refresh
 self.contents.clear
 if @item != nil
 bitmap = RPG::Cache.picture("Item/" + @item.name)
 pic_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
 self.contents.blt(0, 0, bitmap, pic_rect)
 end
 end
 def set_item(item)
 @item = item
 end
 end
 
 
 
 
 
 
 
 
 #==============================================================================
 # ** Scene_Item
 #------------------------------------------------------------------------------
 #  This class performs item screen processing.
 #==============================================================================
 
 ######################
 # Window_Target_Item #
 ######################
 
 class Window_Target_Item < Window_Selectable
 def initialize
 super(0, 80, 280, 420)
 self.contents = Bitmap.new(width - 32, height - 12)
 self.z += 10
 @item_max = $game_party.actors.size
 refresh
 end
 def refresh
 self.contents.clear
 for i in 0...$game_party.actors.size
 x = 4
 y = i * 65
 actor = $game_party.actors
 draw_actor_name(actor, x + 150, y - 4)
 draw_actor_state(actor, x + 150, y + 28)
 draw_actor_hp(actor, x - 2, y - 4, 154)
 draw_actor_sp(actor, x - 2, y + 28, 154)
 end
 end
 def update_cursor_rect
 if @index <= -2
 self.cursor_rect.set(0, (@index + 10) * 65, self.width - 55, 60)
 elsif @index == -1
 self.cursor_rect.set(0, 0, self.width - 55, @item_max * 64 )
 else
 self.cursor_rect.set(0, @index * 65, self.width - 55, 60)
 end
 end
 end
 ############
 # Type_Sel #
 ############
 class Type_Sel < Window_Base
 attr_reader   :index
 attr_reader   :help_window
 def initialize(x, y, width, height)
 super(x, y, width, height)
 @item_max = 1
 @column_max = 1
 @index = -1
 end
 def index=(index)
 @index = index
 end
 def row_max
 return (@item_max + @column_max - 1) / @column_max
 end
 def top_row
 return self.oy / 32
 end
 def top_row=(row)
 if row < 0
 row = 0
 end
 if row > row_max - 1
 row = row_max - 1
 end
 self.oy = row * 32
 end
 def page_row_max
 return (self.height - 32) / 32
 end
 def page_item_max
 return page_row_max * @column_max
 end
 def update
 super
 if self.active and @item_max > 0 and @index >= 0
 if Input.repeat?(Input::RIGHT)
 if (@column_max == 1 and Input.trigger?(Input::RIGHT)) or
 @index < @item_max - @column_max
 $game_system.se_play($data_system.cursor_se)
 @index = (@index + @column_max) % @item_max
 end
 end
 if Input.repeat?(Input::LEFT)
 if (@column_max == 1 and Input.trigger?(Input::LEFT)) or
 @index >= @column_max
 $game_system.se_play($data_system.cursor_se)
 @index = (@index - @column_max + @item_max) % @item_max
 end
 end
 end
 end
 end
 ###############
 # Window_Type #
 ###############
 class Window_Type < Type_Sel
 def initialize
 super(0, 0, 0, 0)
 @item_max = 3
 self.index = 0
 end
 end
 ##################
 # Window_Item_Ex #
 ##################
 class Window_Item_Ex < Window_Selectable
 def initialize
 super(250, 50, 295, 350)
 @column_max = 1
 refresh
 self.index = 0
 if $game_temp.in_battle
 self.y = 64
 self.height = 256
 self.back_opacity = 160
 end
 end
 def item
 return @data[self.index]
 end
 
 def refresh
 if self.contents != nil
 self.contents.dispose
 self.contents = nil
 end
 @data = []
 for i in 1...$data_items.size
 if $game_party.item_number(i) > 0
 @data.push($data_items)
 end
 end
 @item_max = @data.size
 if @item_max > 0
 self.contents = Bitmap.new(width - 32, row_max * 32)
 for i in 0...@item_max
 draw_item(i)
 end
 end
 end
 
 def draw_item(index)
 item = @data[index]
 case item
 when RPG::Item
 number = $game_party.item_number(item.id)
 end
 if item.is_a?(RPG::Item) and
 $game_party.item_can_use?(item.id)
 self.contents.font.color = normal_color
 else
 self.contents.font.color = disabled_color
 end
 x = 4 + index % 1 * (288 + 32)
 y = index / 1 * 32
 rect = Rect.new(x, y, self.width / @column_max - 32, 32)
 self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
 bitmap = RPG::Cache.icon(item.icon_name)
 opacity = self.contents.font.color == normal_color ? 255 : 128
 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
 self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
 self.contents.draw_text(x + 215, y, 16, 32, ":", 1)
 self.contents.draw_text(x + 230, y, 24, 32, number.to_s, 2)
 end
 def update_help
 @help_window.set_text(self.item == nil ? "" : self.item.description)
 end
 end
 #################
 # Window_Weapon #
 #################
 class Window_Weapon < Window_Selectable
 def initialize
 super(250, 50, 295, 350)
 @column_max = 1
 refresh
 self.index = 0
 if $game_temp.in_battle
 self.y = 64
 self.height = 256
 self.back_opacity = 160
 end
 end
 def item
 return @data[self.index]
 end
 def refresh
 if self.contents != nil
 self.contents.dispose
 self.contents = nil
 end
 @data = []
 for i in 1...$data_weapons.size
 if $game_party.weapon_number(i) > 0
 @data.push($data_weapons)
 end
 end
 @item_max = @data.size
 if @item_max > 0
 self.contents = Bitmap.new(width - 32, row_max * 32)
 for i in 0...@item_max
 draw_item(i)
 end
 end
 end
 def draw_item(index)
 item = @data[index]
 case item
 when RPG::Weapon
 number = $game_party.weapon_number(item.id)
 end
 if item.is_a?(RPG::Item) and
 $game_party.item_can_use?(item.id)
 self.contents.font.color = normal_color
 else
 self.contents.font.color = disabled_color
 end
 x = 4 + index % 1 * (288 + 32)
 y = index / 1 * 32
 rect = Rect.new(x, y, self.width / @column_max - 32, 32)
 self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
 bitmap = RPG::Cache.icon(item.icon_name)
 opacity = self.contents.font.color == normal_color ? 255 : 128
 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
 self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
 self.contents.draw_text(x + 215, y, 16, 32, ":", 1)
 self.contents.draw_text(x + 230, y, 24, 32, number.to_s, 2)
 end
 def update_help
 @help_window.set_text(self.item == nil ? "" : self.item.description)
 end
 end
 ################
 # Window_Armor #
 ################
 class Window_Armor < Window_Selectable
 def initialize
 super(250, 50, 295, 350)
 @column_max = 1
 refresh
 self.index = 0
 if $game_temp.in_battle
 self.y = 64
 self.height = 256
 self.back_opacity = 160
 end
 end
 def item
 return @data[self.index]
 end
 def refresh
 if self.contents != nil
 self.contents.dispose
 self.contents = nil
 end
 @data = []
 for i in 1...$data_armors.size
 if $game_party.armor_number(i) > 0
 @data.push($data_armors)
 end
 end
 @item_max = @data.size
 if @item_max > 0
 self.contents = Bitmap.new(width - 32, row_max * 32)
 for i in 0...@item_max
 draw_item(i)
 end
 end
 end
 def draw_item(index)
 item = @data[index]
 case item
 when RPG::Armor
 number = $game_party.armor_number(item.id)
 end
 if item.is_a?(RPG::Item) and
 $game_party.item_can_use?(item.id)
 self.contents.font.color = normal_color
 else
 self.contents.font.color = disabled_color
 end
 x = 4 + index % 1 * (288 + 32)
 y = index / 1 * 32
 rect = Rect.new(x, y, self.width / @column_max - 32, 32)
 self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
 bitmap = RPG::Cache.icon(item.icon_name)
 opacity = self.contents.font.color == normal_color ? 255 : 128
 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
 self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
 self.contents.draw_text(x + 215, y, 16, 32, ":", 1)
 self.contents.draw_text(x + 230, y, 24, 32, number.to_s, 2)
 end
 def update_help
 @help_window.set_text(self.item == nil ? "" : self.item.description)
 end
 end
 ##############
 # Scene_Item #
 ##############
 class Scene_Item
 
 def main
 @item_com = Sprite.new
 @item_com.bitmap = RPG::Cache.picture("Back0")
 @item_com.opacity -= 40
 @item_com.z = 100
 @type = Window_Type.new
 @type.opacity = 0
 @type.visible = false
 @help_window = Window_Help.new
 @help_window.y = 405
 @item_window = Window_Item_Ex.new
 @item_window.help_window = @help_window
 @item_window.visible = true
 @item_window.active = true
 @weapon_window = Window_Weapon.new
 @weapon_window.help_window = @help_window
 @weapon_window.visible = false
 @weapon_window.active = true
 @armor_window = Window_Armor.new
 @armor_window.help_window = @help_window
 @armor_window.visible = false
 @armor_window.active = true
 @target_window = Window_Target_Item.new
 @target_window.x = -300
 @target_window.active = false
 @help_window.opacity = 0
 @help_window.x = -200
 @help_window.contents_opacity = 0
 @item_window.opacity -= 110
 @weapon_window.opacity -= 110
 @armor_window.opacity -= 110
 @target_window.opacity = 0
 @weapon_window.x = 640
 @armor_window.x = 640
 @item_window.x = 640
 @weapon_window.contents_opacity = 0
 @armor_window.contents_opacity = 0
 @item_window.contents_opacity = 0
 @equip_window = Window_Equip.new
 Graphics.transition
 loop do
 Graphics.update
 Input.update
 update
 if $scene != self
 break
 end
 end
 for i in 0..30
 @weapon_window.x += 20
 @armor_window.x += 20
 @item_window.x += 20
 @weapon_window.contents_opacity -= 15
 @armor_window.contents_opacity -= 15
 @item_window.contents_opacity -= 15
 @target_window.x -= 15
 @help_window.contents_opacity -= 15
 Graphics.update
 end
 Graphics.freeze
 @help_window.dispose
 @item_window.dispose
 @weapon_window.dispose
 @armor_window.dispose
 @target_window.dispose
 @item_com.dispose
 @type.dispose
 @equip_window.dispose
 end
 
 def update
 if @target_window.active == true
 @target_window.visible = true
 if @target_window.x < 0
 @target_window.x += 20
 elsif @target_window.x >= 0
 @target_window.x = 0
 end
 else
 if @target_window.x > -300
 @target_window.x -= 20
 elsif @target_window.x >= -300
 @target_window.x = -300
 @target_window.visible = false
 end
 end
 if @help_window.x < 0
 @help_window.x += 10
 @help_window.contents_opacity += 15
 elsif @help_window.x >= 0
 @help_window.x = 0
 @help_window.contents_opacity = 255
 end
 if @item_window.x > 250
 @weapon_window.x -= 20
 @armor_window.x -= 20
 @item_window.x -= 20
 @weapon_window.contents_opacity += 15
 @armor_window.contents_opacity += 15
 @item_window.contents_opacity += 15
 elsif  @item_window.x <= 250
 @weapon_window.x = 250
 @armor_window.x = 250
 @item_window.x = 250
 @weapon_window.contents_opacity = 250
 @armor_window.contents_opacity = 250
 @item_window.contents_opacity = 250
 end
 if @target_window.active == false
 if Input.trigger?(Input::RIGHT) or Input.trigger?(Input::LEFT) or
 Input.press?(Input::RIGHT) or  Input.press?(Input::LEFT)
 @weapon_window.x = 640
 @armor_window.x = 640
 @item_window.x = 640
 @weapon_window.contents_opacity = 0
 @armor_window.contents_opacity = 0
 @item_window.contents_opacity = 0
 end
 if Input.trigger?(Input.dir4) or Input.trigger?(Input.dir4) or
 Input.trigger?(Input::L) or Input.trigger?(Input::R)
 @help_window.x = -200
 @help_window.contents_opacity = 0
 end
 end
 @help_window.update
 @item_window.update
 @weapon_window.update
 @armor_window.update
 @target_window.update
 @equip_window.refresh
 @type.update
 case @type.index
 when 0
 @item_com.bitmap = RPG::Cache.picture("Back0")
 if @target_window.active == true
 update_target
 @item_window.active = false
 @equip_window.visible = false
 @type.active = false
 return
 else
 @item_window.active = true
 @type.active = true
 @equip_window.visible = true
 end
 @weapon_window.active = false
 @armor_window.active = false
 @item_window.visible = true
 @weapon_window.visible = false
 @armor_window.visible = false
 when 1
 @item_com.bitmap = RPG::Cache.picture("Back1")
 @item_window.active = false
 @weapon_window.active = true
 @armor_window.active = false
 @item_window.visible = false
 @weapon_window.visible = true
 @armor_window.visible = false
 when 2
 @item_com.bitmap = RPG::Cache.picture("Back2")
 @item_window.active = false
 @weapon_window.active = false
 @armor_window.active = true
 @item_window.visible = false
 @weapon_window.visible = false
 @armor_window.visible = true
 end
 if @item_window.active
 update_item
 return
 end
 if @weapon_window.active
 update_weapon
 return
 end
 if @armor_window.active
 update_armor
 return
 end
 end
 
 def update_weapon
 #########add picture to item#################
 @item = @weapon_window.item
 @equip_window.set_item(@item)
 ##################
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 $scene = Scene_Menu.new(0)
 return
 end
 end
 
 def update_armor
 #########add picture to item#################
 @item = @armor_window.item
 @equip_window.set_item(@item)
 ##################
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 $scene = Scene_Menu.new(0)
 return
 end
 end
 
 def update_item
 #########add picture to item#################
 @item = @item_window.item
 @equip_window.set_item(@item)
 ##################
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 $scene = Scene_Menu.new(0)
 return
 end
 if Input.trigger?(Input::C)
 @item = @item_window.item
 unless @item.is_a?(RPG::Item)
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 unless $game_party.item_can_use?(@item.id)
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 $game_system.se_play($data_system.decision_se)
 if @item.scope >= 3
 @item_window.active = false
 @target_window.x = (@item_window.index + 1) % 1 * 304
 @target_window.active = true
 @target_window.x = -350
 if @item.scope == 4 || @item.scope == 6
 @target_window.index = -1
 else
 @target_window.index = 0
 end
 else
 if @item.common_event_id > 0
 $game_temp.common_event_id = @item.common_event_id
 $game_system.se_play(@item.menu_se)
 if @item.consumable
 $game_party.lose_item(@item.id, 1)
 @item_window.draw_item(@item_window.index)
 end
 $scene = Scene_Map.new
 return
 end
 end
 return
 end
 end
 def update_target
 if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 unless $game_party.item_can_use?(@item.id)
 @item_window.refresh
 end
 @item_window.active = true
 @target_window.active = false
 return
 end
 if Input.trigger?(Input::C)
 if $game_party.item_number(@item.id) == 0
 $game_system.se_play($data_system.buzzer_se)
 return
 end
 if @target_window.index == -1
 used = false
 for i in $game_party.actors
 used |= i.item_effect(@item)
 end
 end
 if @target_window.index >= 0
 target = $game_party.actors[@target_window.index]
 used = target.item_effect(@item)
 end
 if used
 $game_system.se_play(@item.menu_se)
 if @item.consumable
 $game_party.lose_item(@item.id, 1)
 @item_window.draw_item(@item_window.index)
 end
 @target_window.refresh
 if $game_party.all_dead?
 $scene = Scene_Gameover.new
 return
 end
 if @item.common_event_id > 0
 $game_temp.common_event_id = @item.common_event_id
 $scene = Scene_Map.new
 return
 end
 end
 unless used
 $game_system.se_play($data_system.buzzer_se)
 end
 return
 end
 end
 end
 系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
 | 
 |