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

Project1

 找回密码
 注册会员
搜索
查看: 2732|回复: 11
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

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

开拓者

跳转到指定楼层
1
发表于 2019-7-18 03:31:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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键设置在道具窗口后,如果我不想关闭窗口,想直接用命令取消该设置的键位让其变成没有设置键位该怎么办?

Lv4.逐梦者

梦石
0
星屑
9682
在线时间
570 小时
注册时间
2017-9-28
帖子
208
2
发表于 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 塞糖

查看全部评分

喵喵喵
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1680
在线时间
91 小时
注册时间
2019-5-16
帖子
45
3
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

开拓者

4
 楼主| 发表于 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都是正常的
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9682
在线时间
570 小时
注册时间
2017-9-28
帖子
208
5
发表于 2019-7-19 10:25:54 | 只看该作者
体会一下?

RUBY 代码复制下载
  1. class Window_Popup < Window_Selectable
  2.   def initialize
  3.     super 0, 0, 0, 0
  4.     self.openness = 0
  5.   end
  6.  
  7.   def set_text text
  8.     width, height = measure text
  9.     self.width = width + standard_padding * 2
  10.     self.height = height + standard_padding * 2
  11.     create_contents
  12.     draw_text_ex 0, 0, text
  13.   end
  14.  
  15.   def measure text
  16.     width = text.lines.map { |e| (contents.text_size e.chomp).width }.max
  17.     height = text.lines.to_a.size * line_height
  18.     return width, height
  19.   end
  20. end
  21.  
  22. class Window_ItemList < Window_Selectable
  23.   def process_handling
  24.     super
  25.     return unless open? && active && @data[index]
  26.     process_popup if handle?(:popup) && Input.trigger?(:X)
  27.   end
  28.  
  29.   def process_popup
  30.     if handle?(:popup)
  31.       Sound.play_ok
  32.       Input.update
  33.       deactivate
  34.       call_handler(:popup)
  35.     else
  36.       Sound.play_buzzer
  37.     end
  38.   end
  39. end
  40.  
  41. class Scene_Item < Scene_ItemBase
  42.   alias _start_without_popup start
  43.   def start
  44.     _start_without_popup
  45.     create_popup_window
  46.   end
  47.  
  48.   alias _create_item_window_without_popup create_item_window
  49.   def create_item_window
  50.     _create_item_window_without_popup
  51.     @item_window.set_handler(:popup, method(:on_item_popup))
  52.   end
  53.  
  54.   def create_popup_window
  55.     @popup_window = Window_Popup.new
  56.     @popup_window.viewport = @viewport
  57.     @popup_window.set_handler(:ok,     method(:on_popup_ok))
  58.     @popup_window.set_handler(:cancel, method(:on_popup_ok))
  59.   end
  60.  
  61.   def on_item_popup
  62.     rect = @item_window.item_rect @item_window.index
  63.     @popup_window.x = @item_window.x + @item_window.padding + rect.x
  64.     @popup_window.y = @item_window.y + @item_window.padding + rect.y + rect.height
  65.     @popup_window.set_text "You selected #{@item_window.item.name}"
  66.     @popup_window.show.activate.open
  67.   end
  68.  
  69.   def on_popup_ok
  70.     @popup_window.close
  71.     update until @popup_window.close?
  72.     @popup_window.hide.deactivate
  73.     activate_item_window
  74.   end
  75. end

点评

没想到写在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 认可答案

查看全部评分

喵喵喵
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 04:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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