Project1

标题: Window_Help的文字内容有时候不更新 [打印本页]

作者: galaxys    时间: 2011-9-28 02:24
标题: Window_Help的文字内容有时候不更新
我仿照特技界面做了一个“技能界面”,内容完全是照搬特技界面的,但是去掉了技能使用的功能,而只有移动光标查看技能描述的作用。(准备把特技系统换成技能系统)
现在的问题是,比如说当前光标的index 是0,移动到index 1的时候,Window_Help的文字内容能够更新到index 1;但把光标移回index 0,Window_Help还是显示index 1的内容。此时如果把光标移动到index 2,那么再移回index0 和1都是显示index 2的help。

工程文件太大,而且修改的地方也比较多了,就不上传了。如果有哪位大大碰巧遇到过类似的问题,就请说下当时的原因吧~没有的话我就自己继续慢慢找原因了……

应该是去掉技能使用的功能时误删了无关的功能吧……dsu_plus_rewardpost_czw
作者: 月夜神音    时间: 2011-9-28 05:43
阁下确定你的脚本是这样吗?
  1. #==============================================================================
  2. # ■ Scene_ShowSkill
  3. #------------------------------------------------------------------------------
  4. #  显示技能画面的类。
  5. #==============================================================================

  6. class Scene_ShowSkill < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor_index : 角色位置
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor_index = 0, equip_index = 0)
  12.     @actor_index = actor_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 开始处理
  16.   #--------------------------------------------------------------------------
  17.   def start
  18.     super
  19.     create_menu_background
  20.     @actor = $game_party.members[@actor_index]
  21.     @viewport = Viewport.new(0, 0, 544, 416)
  22.     @help_window = Window_Help.new
  23.     @help_window.viewport = @viewport
  24.     @status_window = Window_SkillStatus.new(0, 56, @actor)
  25.     @status_window.viewport = @viewport
  26.     @skill_window = Window_Skill.new(0, 112, 544, 304, @actor)
  27.     @skill_window.viewport = @viewport
  28.     @skill_window.help_window = @help_window
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 结束处理
  32.   #--------------------------------------------------------------------------
  33.   def terminate
  34.     super
  35.     dispose_menu_background
  36.     @help_window.dispose
  37.     @status_window.dispose
  38.     @skill_window.dispose
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 回到原画面
  42.   #--------------------------------------------------------------------------
  43.   def return_scene
  44.     $scene = Scene_Menu.new(1)
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 切换至下一角色画面
  48.   #--------------------------------------------------------------------------
  49.   def next_actor
  50.     @actor_index += 1
  51.     @actor_index %= $game_party.members.size
  52.     $scene = Scene_Skill.new(@actor_index)
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 切换至上一角色画面
  56.   #--------------------------------------------------------------------------
  57.   def prev_actor
  58.     @actor_index += $game_party.members.size - 1
  59.     @actor_index %= $game_party.members.size
  60.     $scene = Scene_Skill.new(@actor_index)
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 更新画面
  64.   #--------------------------------------------------------------------------
  65.   def update
  66.     super
  67.     update_menu_background
  68.     @help_window.update
  69.     @status_window.update
  70.     @skill_window.update
  71.     if @skill_window.active
  72.       update_skill_selection
  73.     elsif @target_window.active
  74.       update_target_selection
  75.     end
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 更新技能选择
  79.   #--------------------------------------------------------------------------
  80.   def update_skill_selection
  81.     if Input.trigger?(Input::B)
  82.       Sound.play_cancel
  83.       return_scene
  84.     elsif Input.trigger?(Input::R)
  85.       Sound.play_cursor
  86.       next_actor
  87.     elsif Input.trigger?(Input::L)
  88.       Sound.play_cursor
  89.       prev_actor
  90.     end
  91.   end
  92. end
复制代码

作者: 亿万星辰    时间: 2011-9-28 07:30
如果只是要去掉使用功能,把对于按键的处理修改一下就好了,其他的什么都不用动~
作者: 仲秋启明    时间: 2011-9-28 13:33
需要一个update或clear
RM不在手边,指令拼不全
作者: galaxys    时间: 2011-9-29 00:20
我找到原因了。因为我在Window_Base中自定义了一个“可以换行的draw_text”方法,然后在Window_Help中使用了它。这个方法在引用的时候会把作为参数传入的字符串的值给改掉,结果再次访问这个被改掉的字符串,当然就出问题了。

现在我加入了 “long_text = value.clone”这一行,那么就不会出这个问题了。

这个方法本身……恩……还很有改进的余地,哈哈哈哈
  1.   #--------------------------------------------------------------------------
  2.   # ● 可以换行的draw_text
  3.   #     value : 文字
  4.   #     x     : 描画目标 X 坐标
  5.   #     y     : 描画目标 Y 坐标
  6.   #     width : 描画目标宽度
  7.   #--------------------------------------------------------------------------
  8.   def draw_long_text(value, x, y, width)
  9.    
  10.     self.contents.font.color = normal_color
  11.     yyy = []
  12.     zzz = []
  13.     lines = 1
  14.     long_text = value.clone

  15.     loop do
  16.       if long_text.index("\n") == nil
  17.         zzz[lines] = long_text
  18.         break
  19.       end
  20.       yyy[lines] = long_text.index("\n")
  21.       zzz[lines] = long_text.slice!(0,yyy[lines])
  22.       long_text = long_text.slice!(1,long_text.size-1)
  23.       lines += 1
  24.     end

  25.     for i in 1..lines
  26.       self.contents.draw_text(x, y + (i-1) * 32, width, WLH, zzz[i])
  27.     end

  28.   end
复制代码





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