查看: 3421|回复: 4

[已经解决] 为什么物品栏移动分类,就能改变其他视窗的内容?

[复制链接]
梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
发表于 2020-4-13 08:36:56 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×

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

md,标题的问法看来跟sb一样
梦石
2
星屑
6767
在线时间
501 小时
注册时间
2018-3-23
回帖
487

R考场第七期银奖

发表于 2020-4-13 08:54:49 | 显示全部楼层
本帖最后由 MCCF 于 2020-4-13 08:56 编辑

明白你的意思了。首先你要看Scene_Item的处理:
[pre lang="ruby"]  #--------------------------------------------------------------------------
# ● 生成分类窗口
#--------------------------------------------------------------------------
def create_category_window
  @category_window = Window_ItemCategory.new
  @category_window.viewport = @viewport
  @category_window.help_window = @help_window
  @category_window.y = @help_window.height
  @category_window.set_handler(:ok,     method(:on_category_ok))
  @category_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
# ● 生成物品窗口
#--------------------------------------------------------------------------
def create_item_window
  wy = @category_window.y + @category_window.height
  wh = Graphics.height - wy
  @item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
  @item_window.viewport = @viewport
  @item_window.help_window = @help_window
  @item_window.set_handler(:ok,     method(:on_item_ok))
  @item_window.set_handler(:cancel, method(:on_item_cancel))
  @category_window.item_window = @item_window
end[/pre]会看到帮助窗口(在父类定义)被传递给了分类窗口和物品窗口;
物品窗口被传递给了分类窗口。
于是分类窗口改变时就会调用物品窗口的方法让其refresh(刷新)。如Window_ItemCategory内:
[pre lang="ruby"]#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
  super
  @item_window.category = current_symbol if @item_window
end[/pre]
在Window_ItemList内对应有:
[pre lang="ruby"]#--------------------------------------------------------------------------
# ● 设置分类
#--------------------------------------------------------------------------
def category=(category)
  return if @category == category
  @category = category
  refresh
  self.oy = 0
end[/pre]

评分

参与人数 1星屑 +100 收起 理由
VIPArcher + 100 认可答案

查看全部评分

祝好。
回复

使用道具 举报

梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
 楼主| 发表于 2020-4-13 09:17:32 | 显示全部楼层
MCCF 发表于 2020-4-13 08:54
明白你的意思了。首先你要看Scene_Item的处理:
  #---------------------------------------------------- ...


噢,原来是这样,谢谢大佬!!
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
5706
在线时间
922 小时
注册时间
2013-8-29
回帖
1401
发表于 2020-4-13 10:24:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 1 0

使用道具 举报

梦石
0
星屑
1388
在线时间
343 小时
注册时间
2016-7-17
回帖
82
 楼主| 发表于 2020-4-14 04:14:59 | 显示全部楼层
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的判断?
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部