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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 闪电
打印 上一主题 下一主题

希望能实现简单的图片菜单

 关闭 [复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

11
发表于 2007-7-31 19:55:56 | 只看该作者
黑色的背景你估计没有用半透明。其实半透明的方法
以下引用oceary于2007-5-16 10:30:33的发言:

在定义窗口类时
def initialize的super后面插入

self.back_opacity =160(只是背景半透明)
或self.opacity =160(窗口边缘也半透明)
对于几个窗口一起显示的,可以直接把self改成具体的名字

在那个窗口的def main部分

Graphics.transition前插入
@screen = Spriteset_Map.new

Graphics.freeze后面加上
@screen.dispose
这样才能有大地图的背景...不然你的半透明就是黑色背景的,根本看不出什么


楼上正解!经测试可用!感谢ocery的精彩回答!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2006-1-28
帖子
996
12
 楼主| 发表于 2009-6-12 08:00:00 | 只看该作者
问一下,想实现这样的功能:
调用菜单的时候插入图片,离开菜单的时候图片消失
同理调用物品,装备,状态等菜单的时候也分别插入不同图片,要用怎么样的语句实现呢,谢谢.....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2007-6-28
帖子
84
13
发表于 2007-8-1 09:44:09 | 只看该作者
給你我的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感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2006-1-28
帖子
996
14
 楼主| 发表于 2007-8-1 17:30:24 | 只看该作者
谢谢了,我拿回去研究一下~~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-7-29
帖子
453
15
发表于 2007-8-1 19:41:31 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
7 小时
注册时间
2007-6-28
帖子
84
16
发表于 2007-8-1 19:54:42 | 只看该作者
我那個是5人版本的, Window_Target_Item 的排版要自己改啊~~~

以下引用闪电于2007-8-1 9:30:24的发言:

谢谢了,我拿回去研究一下~~


系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-13 10:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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