Project1

标题: 关于help_window的刷新 [打印本页]

作者: tan12345    时间: 2014-3-5 19:07
标题: 关于help_window的刷新
最近自己写了个界面,界面分命令行列表,以及帮助框,帮助框用的是VA自带的那个Window_Help,然后在写脚本的时候发现个问题:
我想要的功能是:选择不同的命令行,帮助框就跟着刷新对应的文字(类似物品、技能选择时,在帮助框里可以看到物品、技能的描述),该功能已经实现,但是有个小BUG,在第一次进入Scene的时候,默认选择第一行命令行,但是此时帮助框内容为空,只有鼠标上下移动过后(移动会触发刷新),帮助框的内容才会显现出来……我无语了,所以想请大神帮看看,怎么改才可以让一切换该画面,帮助框就显示对应的匹配内容?
以下我贴上我自己写的一些关键地方,请大神帮看看问题出在哪?
RUBY 代码复制
  1. def refresh
  2.     super
  3.     @help_window.set_text("????") if @help_window
  4.   end
  5.   def cursor_down(wrap = false); super;refresh;end
  6.   def cursor_up(wrap = false); super;refresh;end
  7.   def cursor_left(wrap = false); super;refresh;end
  8.   def cursor_right(wrap = false); super;refresh;end

RUBY 代码复制
  1. def help_window=(help_window)
  2.     @help_window = help_window
  3.     call_update_help
  4.     refresh
  5.   end

RUBY 代码复制
  1. def initialize
  2.     super(0,80)
  3.   end

作者: 喵呜喵5    时间: 2014-3-5 19:51
最简单粗暴的方法,进入这个scene的时候直接手动set_text......
作者: tan12345    时间: 2014-3-5 20:06
喵呜喵5 发表于 2014-3-5 19:51
最简单粗暴的方法,进入这个scene的时候直接手动set_text......

不可行,我跟踪过了,发现最后help_window会clear,目前没找到调用clear的地方,现在2流解决方法是放到update中,但是那个会降帧
作者: 喵呜喵5    时间: 2014-3-5 20:19
tan12345 发表于 2014-3-5 20:06
不可行,我跟踪过了,发现最后help_window会clear,目前没找到调用clear的地方,现在2流解决方法是放到up ...

说起来帮助窗口哪来的光标移动方法......
作者: tan12345    时间: 2014-3-5 20:26
喵呜喵5 发表于 2014-3-5 20:19
说起来帮助窗口哪来的光标移动方法......

……你没仔细看……
是命令窗口光标移动,帮助窗口更新相应内容
目前上下移动是更新了,但是刚进界面的时候,光标还没动的时候,帮助窗口为空
作者: 喵呜喵5    时间: 2014-3-14 17:44
本帖最后由 喵呜喵5 于 2015-12-29 09:51 编辑

完全不理解你自己究竟哪里弄错了,于是自己写了一个这样的脚本……
【看到你的新帖才想起来这个旧帖还没有回复
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2. # ● 选项窗口的类
  3. #--------------------------------------------------------------------------
  4. class Window_M5Command < Window_Command
  5.   #--------------------------------------------------------------------------
  6.   # ● 载入窗口以及选项帮助窗口
  7.   #--------------------------------------------------------------------------
  8.   def initialize
  9.     super(0, fitting_height(2))
  10.     @m5_command_help = Window_Help.new
  11.     @m5_command_help.set_text(current_ext)
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 生成选项列表
  15.   #--------------------------------------------------------------------------
  16.   def make_command_list
  17.     add_command("选项1",  :cho1, true, "选择了选项1")
  18.     add_command("选项2",  :cho2, true, "选择了选项2")
  19.     add_command("选项3",  :cho3, true, "选择了选项3")
  20.     add_command("选项4",  :cho4, true, "选择了选项4")
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 释放选项帮助窗口
  24.   #--------------------------------------------------------------------------
  25.   def dispose
  26.     super
  27.     @m5_command_help.dispose
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 如果光标移动时,更新帮助窗口
  31.   #--------------------------------------------------------------------------
  32.   def process_cursor_move
  33.     last_index = @index
  34.     super
  35.     @m5_command_help.set_text(current_ext) if @index != last_index
  36.   end  
  37. end
  38. #--------------------------------------------------------------------------
  39. # ● Scene
  40. #--------------------------------------------------------------------------
  41. class Scene_Test < Scene_MenuBase
  42.   def start
  43.     super   
  44.     @command_window = Window_M5Command.new
  45.   end
  46. end
  47. class << SceneManager
  48.   def first_scene_class
  49.     $BTEST ? Scene_Battle : Scene_Test
  50.   end
  51. end

作者: VIPArcher    时间: 2014-4-19 15:30
喵呜喵5 发表于 2014-3-14 17:44
完全不理解你自己究竟哪里弄错了,于是自己写了一个这样的脚本……
【看到你的新帖才想起来这个旧帖还没有 ...
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_EquipCommand
  4. #------------------------------------------------------------------------------
  5. #  技能画面中,选择指令(更换装备/最强装备/全部卸下)的窗口。
  6. #==============================================================================

  7. class Window_EquipCommand < Window_HorzCommand
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对象
  10.   #--------------------------------------------------------------------------
  11.   def initialize(x, y, width)
  12.     @window_width = width
  13.     super(x, y)
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取窗口的宽度
  17.   #--------------------------------------------------------------------------
  18.   def window_width
  19.     @window_width
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取列数
  23.   #--------------------------------------------------------------------------
  24.   def col_max
  25.     return 3
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 生成指令列表
  29.   #--------------------------------------------------------------------------
  30.   def make_command_list
  31.     add_command(Vocab::equip2,   :equip)
  32.     add_command(Vocab::optimize, :optimize)
  33.     add_command(Vocab::clear,    :clear)
  34.   end
  35. end
复制代码
这个窗口能这么写吗?要这么写?
作者: 喵呜喵5    时间: 2014-4-19 16:03
VIPArcher 发表于 2014-4-19 15:30
这个窗口能这么写吗?要这么写?


首先你先得告诉我你的帮助窗口那部分代码写好了吗?
作者: VIPArcher    时间: 2014-4-19 18:29
喵呜喵5 发表于 2014-4-19 16:03
首先你先得告诉我你的帮助窗口那部分代码写好了吗?

没有,不懂要怎么写。求指导。就是希望当光标在更换装备什么的那里,帮助窗口里刷新“更换装备”“自动装备”“全部卸下”这样。
作者: 喵呜喵5    时间: 2014-4-19 19:10
本帖最后由 喵呜喵5 于 2015-12-29 09:50 编辑
VIPArcher 发表于 2014-4-19 18:29
没有,不懂要怎么写。求指导。就是希望当光标在更换装备什么的那里,帮助窗口里刷新“更换装备”“自动装 ...
  1. class Window_EquipCommand  
  2.   def process_cursor_move
  3.     last_index = @index
  4.     super
  5.     @help_window.set_text(help_text) if @index != last_index
  6.   end
  7.   def help_text
  8.     case @index
  9.     when 0
  10.       "更换装备"
  11.     when 1
  12.       "自动装备"
  13.     when 2
  14.       "全部卸下"
  15.     end
  16.   end
  17. end
  18. class Scene_Equip
  19.   alias m5_create_command_window create_command_window
  20.   def create_command_window
  21.     m5_create_command_window
  22.     @command_window.help_window = @help_window
  23.   end
  24. end
复制代码

作者: VIPArcher    时间: 2014-4-20 01:15
喵呜喵5 发表于 2014-4-19 19:10

恩,懂了!谢谢。
作者: VIPArcher    时间: 2014-4-21 22:36
本帖最后由 VIPArcher 于 2014-4-21 22:40 编辑
喵呜喵5 发表于 2014-4-19 19:10


那个,突然发现这样写有问题,那个帮助窗口会被刷新为自己设定的那几句话,不会显示物品/技能的描述了。
还是因为我放错位置了呢?

无标题.png (118.23 KB, 下载次数: 39)

还是显示那句话,有一瞬间的刷新为技能描述。

还是显示那句话,有一瞬间的刷新为技能描述。

作者: 喵呜喵5    时间: 2014-4-21 23:03
VIPArcher 发表于 2014-4-21 22:36
那个,突然发现这样写有问题,那个帮助窗口会被刷新为自己设定的那几句话,不会显示物品/技能的描述了。
...

不知道你怎么写的,大不了多加几个判定条件呗,比如光标移动且窗口active时才刷新
作者: VIPArcher    时间: 2014-4-21 23:55
喵呜喵5 发表于 2014-4-21 23:03
不知道你怎么写的,大不了多加几个判定条件呗,比如光标移动且窗口active时才刷新 ...

我就直接把你写的脚本加在原来系统自带的脚本下面
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_EquipCommand
  4. #------------------------------------------------------------------------------
  5. #  技能画面中,选择指令(更换装备/最强装备/全部卸下)的窗口。
  6. #==============================================================================

  7. class Window_EquipCommand < Window_HorzCommand
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对象
  10.   #--------------------------------------------------------------------------
  11.   def initialize(x, y, width)
  12.     @window_width = width
  13.     super(x, y)
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取窗口的宽度
  17.   #--------------------------------------------------------------------------
  18.   def window_width
  19.     @window_width
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取列数
  23.   #--------------------------------------------------------------------------
  24.   def col_max
  25.     return 3
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 生成指令列表
  29.   #--------------------------------------------------------------------------
  30.   def make_command_list
  31.     add_command(Vocab::equip2,   :equip)
  32.     add_command(Vocab::optimize, :optimize)
  33.     add_command(Vocab::clear,    :clear)
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 光标移动处理,更新帮助窗口
  37.   #--------------------------------------------------------------------------
  38.   def process_cursor_move
  39.     last_index = @index
  40.     super
  41.     @help_window.set_text(help_text) if @Index!= last_index
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ●更新帮助窗口信息
  45.   #--------------------------------------------------------------------------
  46.   def help_text
  47.     case @index
  48.     when 0
  49.       "更换装备"
  50.     when 1
  51.       "自动装备"
  52.     when 2
  53.       "全部卸下"
  54.     end
  55.   end
  56. end
复制代码

作者: VIPArcher    时间: 2014-4-22 23:20
喵呜喵5 发表于 2014-4-21 23:03
不知道你怎么写的,大不了多加几个判定条件呗,比如光标移动且窗口active时才刷新 ...

那个就是装备窗口,只是在那里面统一都叫技能物品窗口的样子。
作者: 喵呜喵5    时间: 2014-4-22 23:39
VIPArcher 发表于 2014-4-22 23:20
那个就是装备窗口,只是在那里面统一都叫技能物品窗口的样子。

你特么在逗我?Window_SkillCommand窗口和Window_EquipCommand窗口能一样?
作者: VIPArcher    时间: 2014-4-23 13:55
你看我发的那个脚本就是 Window_EquipCommand  在那个窗口里也是一样的情况,Window_SkillCommand那里我也是这样写的,
作者: 喵呜喵5    时间: 2014-4-23 18:19
VIPArcher 发表于 2014-4-23 13:55
你看我发的那个脚本就是 Window_EquipCommand  在那个窗口里也是一样的情况,Window_SkillCommand那里我也 ...

你给的截图是技能窗口的你给的脚本是装备窗口的到底哪里有你说的问题还是两个窗口都出现你说的问题???
作者: VIPArcher    时间: 2014-4-23 18:23
本帖最后由 VIPArcher 于 2014-4-23 18:27 编辑
喵呜喵5 发表于 2014-4-23 18:19
你给的截图是技能窗口的你给的脚本是装备窗口的到底哪里有你说的问题还是两个窗口都出现你说的问题??? ...


都有一样的问题,截图的时候也没想太多,在技能按钮那里发现的问题所以就在那里截图了。

无标题.png (148.56 KB, 下载次数: 38)

一样的问题

一样的问题

作者: 喵呜喵5    时间: 2015-12-29 09:50
本帖最后由 喵呜喵5 于 2015-12-29 09:52 编辑
VIPArcher 发表于 2014-4-23 18:23
都有一样的问题,截图的时候也没想太多,在技能按钮那里发现的问题所以就在那里截图了。 ...


时隔一年后回来扫自己的旧帖子




因为14楼第42行的正确代码应该为:
  1. @help_window.set_text(help_text) if @index != last_index
复制代码
论坛自动 @ 的同时,还把 @index 的第一个 i 换成大写了,因此我自己怎么测试都是正常的,你那里怎么测试都出错的




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