查看: 3235|回复: 11

[已经解决] 关于window窗口的:X键位设置的问题

[复制链接]
梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

发表于 2019-7-18 03:31:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 jianyulei 于 2019-7-18 03:34 编辑

请问为何我在@category_window设置:X键位之后,后面的@item_window无论怎么设置:X的键位,游戏中按下A键也只能调用@category_window设置的:X键位?明明:ok和:cancel都很正常啊.
相反,在@item_window里设置:X键位,会让@category_window窗口中按A键也有同样效果.
还有用@item_window.set_handler(:X,     method(:on_item_ok))  将A键设置在道具窗口后,如果我不想关闭窗口,想直接用命令取消该设置的键位让其变成没有设置键位该怎么办?
梦石
0
星屑
9862
在线时间
580 小时
注册时间
2017-9-28
回帖
203
发表于 2019-7-18 08:57:45 | 显示全部楼层
@category_window 和 @item_window 的 active 状态同时只能有一个,active 的那个会响应按键。你遇到这些问题就是因为 active 状态没管理好。

只看你的描述并不能猜到你对默认脚本做了什么修改(而导致了异常),如果需要参考的话可以看中文帮助文档里的这篇小教程

点评

active 的意义只是更新(update)时做出响应,所以看你设计上需不需要多个,没什么必须保证一个的说法(只是默认脚本保证了)  发表于 2019-7-18 13:24
Window_Selectable 的 process_ok 里面有一个 deactivative,它保证了默认脚本的“当前 active 窗口”只有一个  发表于 2019-7-18 13:22
「active 状态同时只能有一个」应该如何理解?是每次有新窗口 activate 就会停掉旧的,还是同一时间理应只有一个处于 active 状态?  发表于 2019-7-18 11:45

评分

参与人数 1赞 +1 收起 理由
jianyulei + 1 塞糖

查看全部评分

喵喵喵
回复

使用道具 举报

梦石
0
星屑
1680
在线时间
91 小时
注册时间
2019-5-16
回帖
41
发表于 2019-7-18 16:58:53 | 显示全部楼层
hyrious 发表于 2019-7-18 08:57
@category_window 和 @item_window 的 active 状态同时只能有一个,active 的那个会响应按键。你遇到这些问 ...

嗯嗯!所以可以作出两个各说各话的选择窗口咯!

点评

记忆模糊  发表于 2019-7-18 17:24
……怎么另外开了一楼,我明明点的是咖啡杯  发表于 2019-7-18 16:59
回复

使用道具 举报

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
回帖
659

开拓者

 楼主| 发表于 2019-7-18 21:49:39 | 显示全部楼层
hyrious 发表于 2019-7-18 08:57
@category_window 和 @item_window 的 active 状态同时只能有一个,active 的那个会响应按键。你遇到这些问 ...

我是修改的原版的道具菜单,想在选择道具那里加上个A键的弹出窗口,参考process_handling里:C的方式增加了:X的按键对应,但发现在@item_window窗口里建立的:X会被@category_window读取,如果是在@category_window建立,同样@item_window也能使用,同时建立则只有@category_window建立的:X生效,完全不知道什么原因.因为同样方法建立的:ok都是正常的
回复

使用道具 举报

梦石
0
星屑
9862
在线时间
580 小时
注册时间
2017-9-28
回帖
203
发表于 2019-7-19 10:25:54 | 显示全部楼层
体会一下?
GIF.gif
[pre lang="ruby" file="example_popup_window.rb"]class Window_Popup < Window_Selectable
  def initialize
    super 0, 0, 0, 0
    self.openness = 0
  end

  def set_text text
    width, height = measure text
    self.width = width + standard_padding * 2
    self.height = height + standard_padding * 2
    create_contents
    draw_text_ex 0, 0, text
  end

  def measure text
    width = text.lines.map { |e| (contents.text_size e.chomp).width }.max
    height = text.lines.to_a.size * line_height
    return width, height
  end
end

class Window_ItemList < Window_Selectable
  def process_handling
    super
    return unless open? && active && @data[index]
    process_popup if handle?(:popup) && Input.trigger?(:X)
  end

  def process_popup
    if handle?(:popup)
      Sound.play_ok
      Input.update
      deactivate
      call_handler(:popup)
    else
      Sound.play_buzzer
    end
  end
end

class Scene_Item < Scene_ItemBase
  alias _start_without_popup start
  def start
    _start_without_popup
    create_popup_window
  end

  alias _create_item_window_without_popup create_item_window
  def create_item_window
    _create_item_window_without_popup
    @item_window.set_handler(:popup, method(:on_item_popup))
  end

  def create_popup_window
    @popup_window = Window_Popup.new
    @popup_window.viewport = @viewport
    @popup_window.set_handler(:ok,     method(:on_popup_ok))
    @popup_window.set_handler(:cancel, method(:on_popup_ok))
  end

  def on_item_popup
    rect = @item_window.item_rect @item_window.index
    @popup_window.x = @item_window.x + @item_window.padding + rect.x
    @popup_window.y = @item_window.y + @item_window.padding + rect.y + rect.height
    @popup_window.set_text "You selected #{@item_window.item.name}"
    @popup_window.show.activate.open
  end

  def on_popup_ok
    @popup_window.close
    update until @popup_window.close?
    @popup_window.hide.deactivate
    activate_item_window
  end
end
[/pre]

点评

没想到写在Window_ItemList里面也可以在大地图上用上快捷键,我还以为只有道具窗口有效  发表于 2019-7-19 22:08
检查了下,和我的脚本区别在于,我是按照原版的写法将:X写在Window_Selectable里面,而你写在Window_ItemList, 在那里可以区分两个窗口的active  发表于 2019-7-19 22:04

评分

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

查看全部评分

喵喵喵
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部