Project1

标题: 请教怎么建立一个选择防具的窗口 [打印本页]

作者: 七禽七兽    时间: 2014-9-19 15:34
标题: 请教怎么建立一个选择防具的窗口
本帖最后由 七禽七兽 于 2014-9-19 15:45 编辑

与事件NPC对话,显示一窗口,窗口中只显示数据库编号为变量1和变量3的防具(如果变量为0就不显示)。选中该防具按确定键,角色就得到该防具,同时窗口中的防具数量-1

作者: RyanBern    时间: 2014-9-19 15:54
本帖最后由 RyanBern 于 2014-9-20 11:43 编辑

简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:
  1. $scene.show_armor_select
复制代码
可以调出防具选择对话框,选择完毕后,被选择的防具会自动进入背包。(也可以按ESC取消选择)
按照要求,窗口显示的内容被限制在1~3号变量所代表的防具。
[pre lang="Ruby"]class Game_System
  alias rb_initialize initialize
  def initialize
    @armor_storage = {}
    rb_initialize
  end
  def armor_storage(armor_id)
    @armor_storage = {} if @armor_storage.nil?
    return @armor_storage[armor_id].nil? ? 2 : @armor_storage[armor_id]
  end
  def storage_export(id, number)
    @armor_storage[id] = [armor_storage(id) - number, 0].max
  end
end
class Window_ArmorSelect < Window_Selectable
  def initialize
    super(0, 0, 256, 32)
    self.x = 320 - width / 2
    self.y = 240 - height / 2
    self.visible = false
    self.active = false
    self.index = 0
    refresh
  end
  def refresh
    @data = []
    (1..3).each do |i|
      id = $game_variables
      armor = $data_armors[id]
      @data.push($data_armors[id]) unless armor.nil? || $game_system.armor_storage(id) == 0
    end
    self.height = (1 + @data.size) * 32
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, @item_max * 32)
      (0...@item_max).each do |i|
        draw_item(i)
      end
    end
  end
  def draw_item(index)
    item = @data[index]
    if item == nil
      return
    end
    x = 4
    y = 32 * index
    color = $game_system.armor_storage(item.id) > 0 ? normal_color : disabled_color
    self.contents.font.color = color
    opacity = $game_system.armor_storage(item.id) > 0 ? 255 : 128
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 160, 32, item.name)
    text = ": " + $game_system.armor_storage(item.id).to_s
    self.contents.draw_text(0, y, width - 32, 32, text, 2)
  end
  def armor
    @data[self.index]
  end
  def show
    refresh
    self.visible = true
    self.active = true
  end
end
class Scene_Map
  alias rb_main main
  def main
    @armor_window = Window_ArmorSelect.new
    rb_main
    @armor_window.dispose
  end
  alias rb_update update
  def update
    if @armor_window.active
      update_armor
      return
    end
    rb_update
  end
  def update_armor
    @armor_window.update
    if Input.trigger?(Input::C)
      armor_id = @armor_window.armor.id
      if $game_system.armor_storage(armor_id) == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @armor_window.active = false
      @armor_window.visible = false
      $game_party.gain_armor(armor_id, 1)
      $game_system.storage_export(armor_id, 1)
      return
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @armor_window.visible = false
      @armor_window.active = false
      return
    end
  end
  def show_armor_select
    @armor_window.show
  end
end[/pre]
作者: 七禽七兽    时间: 2014-9-19 23:39
我的意思是,已知变量1、2、3的值,假设变量1、2、3的值分别是7、8、9,就在窗口显示数据库编号为789的防具,假设变量1、2、3分别是0、8、0,那么只在窗口显示数据库编号为8的防具,窗口中显示的每件防具如果存在,那么每一种的数量都为2。
(关于窗口显示数量的要求我没有说,对不起)
作者: 七禽七兽    时间: 2014-9-20 09:57
本帖最后由 七禽七兽 于 2014-9-20 10:03 编辑
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...


我先对变量1、变量2、变量3赋值
(, 下载次数: 45)



然后用事件执行脚本$scene.armor_window.show调出窗口
(, 下载次数: 45)



我希望窗口出现的是6号7号10号防具,数量是各一件,但是窗口里啥都没有?
(, 下载次数: 44)
作者: 七禽七兽    时间: 2014-9-20 11:18
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...

为什么我打开的防具选择窗口始终是这个样子??

(, 下载次数: 42)
作者: 七禽七兽    时间: 2014-9-20 12:11
本帖最后由 七禽七兽 于 2014-9-20 12:15 编辑
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...


加了refresh,出错了

(, 下载次数: 36)
作者: RyanBern    时间: 2014-9-20 20:22
已附加范例工程,打开看看吧。
(, 下载次数: 38)




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