Project1

标题: 为什么物品栏移动分类,就能改变其他视窗的内容? [打印本页]

作者: b200077    时间: 2020-4-13 08:36
标题: 为什么物品栏移动分类,就能改变其他视窗的内容?

我知道是set_handle的作用,可是要怎么模仿他一漾
想用这个做一个解释词语的脚本。

md,标题的问法看来跟sb一样
作者: MCCF    时间: 2020-4-13 08:54
本帖最后由 MCCF 于 2020-4-13 08:56 编辑

明白你的意思了。首先你要看Scene_Item的处理:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 生成分类窗口
  3. #--------------------------------------------------------------------------
  4. def create_category_window
  5.   @category_window = Window_ItemCategory.new
  6.   @category_window.viewport = @viewport
  7.   @category_window.help_window = @help_window
  8.   @category_window.y = @help_window.height
  9.   @category_window.set_handler(:ok,     method(:on_category_ok))
  10.   @category_window.set_handler(:cancel, method(:return_scene))
  11. end
  12. #--------------------------------------------------------------------------
  13. # ● 生成物品窗口
  14. #--------------------------------------------------------------------------
  15. def create_item_window
  16.   wy = @category_window.y + @category_window.height
  17.   wh = Graphics.height - wy
  18.   @item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
  19.   @item_window.viewport = @viewport
  20.   @item_window.help_window = @help_window
  21.   @item_window.set_handler(:ok,     method(:on_item_ok))
  22.   @item_window.set_handler(:cancel, method(:on_item_cancel))
  23.   @category_window.item_window = @item_window
  24. end
会看到帮助窗口(在父类定义)被传递给了分类窗口和物品窗口;
物品窗口被传递给了分类窗口。
于是分类窗口改变时就会调用物品窗口的方法让其refresh(刷新)。如Window_ItemCategory内:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 更新画面
  3. #--------------------------------------------------------------------------
  4. def update
  5.   super
  6.   @item_window.category = current_symbol if @item_window
  7. end

在Window_ItemList内对应有:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 设置分类
  3. #--------------------------------------------------------------------------
  4. def category=(category)
  5.   return if @category == category
  6.   @category = category
  7.   refresh
  8.   self.oy = 0
  9. end

作者: b200077    时间: 2020-4-13 09:17
MCCF 发表于 2020-4-13 08:54
明白你的意思了。首先你要看Scene_Item的处理:
  #---------------------------------------------------- ...


噢,原来是这样,谢谢大佬!!
作者: chanszeman1018    时间: 2020-4-13 10:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: b200077    时间: 2020-4-14 04:14
MCCF 发表于 2020-4-13 08:54
明白你的意思了。首先你要看Scene_Item的处理:
  #---------------------------------------------------- ...

想在请教这一段
def include?(item)
    case @entry
    when :item
      item.is_a?(RPG::Item) && !item.key_item?
    when :weapon
      item.is_a?(RPG::Weapon)
    when :armor
      item.is_a?(RPG::Armor)
    when :key_item
      item.is_a?(RPG::Item) && item.key_item?
    else
      false
    end
  end
请问怎么改变这个判定,才能迭代case @entry的判断?




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