Project1

标题: 帮助窗口试图做两种颜色的字,结果出现bug了 [打印本页]

作者: eve592370698    时间: 2011-10-13 18:54
标题: 帮助窗口试图做两种颜色的字,结果出现bug了
看看这个代码
  1. class Window_Help < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, 800, 64)
  7.     self.contents = Bitmap.new(width - 32, height - 32)
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 设置文本
  11.   #     text  : 窗口显示的字符串
  12.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  13.   #--------------------------------------------------------------------------
  14.   def set_text(text, align = 0)
  15.     # 如果文本和对齐方式的至少一方与上次的不同
  16.     if text != @text or align != @align
  17.       # 再描绘文本
  18.       self.contents.clear
  19.       self.contents.font.color = normal_color
  20.       # 为了方便、将 "\\\\" 变换为 "\000"
  21.       text.gsub!(/\\\\/) { "\000" }
  22.       # "\\C" 变为 "\001"、"\\G" 变为 "\002"
  23.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  24.       text.gsub!(/\\[Gg]/) { "\002" }
  25.       #后面这些是自己从别处移植过来的
  26.       # c 获取 1 个字
  27.       if ((c = text.slice!(/./m)) != nil)        
  28.         case c
  29.         when "\000"       # \\ 的情况下
  30.           # 还原为本来的文字
  31.           c = "\\"
  32.         when "\001"        #\C[n] 的情况下
  33.           # 更改文字色
  34.           text.sub!(/\[([0-9]+)\]/, "")
  35.           color = $1.to_i
  36.           if color >= 0 and color <= 7
  37.             self.contents.font.color = text_color(color)
  38.           end
  39.         when "\002"        # \G 的情况下
  40.         # 生成金钱窗口
  41.           if @gold_window == nil
  42.             @gold_window = Window_货币.new
  43.             @gold_window.x = 560 - @gold_window.width
  44.             if $game_temp.in_battle
  45.               @gold_window.y = 192
  46.             else
  47.             @gold_window.y = self.y >= 128 ? 32 : 384
  48.             end
  49.             @gold_window.opacity = self.opacity
  50.             @gold_window.back_opacity = self.back_opacity
  51.           end        
  52.         end        
  53.         #为了兼容1.03版本特别修改一下:
  54.         if c == "\001" or c == "\002" or c == "\003" or c == "\n"
  55.           c = ""        
  56.         end
  57.         # dx 为要描绘文字的宽度加法运算
  58.       end
  59.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  60.       @text = text
  61.       @align = align
  62.       @actor = nil
  63.     end
  64.     self.visible = true
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 设置角色
  68.   #     actor : 要显示状态的角色
  69.   #--------------------------------------------------------------------------
  70.   def set_actor(actor)
  71.     if actor != @actor
  72.       self.contents.clear
  73.       draw_actor_name(actor, 4, 0)
  74.       draw_actor_state(actor, 140, 0)
  75.       draw_actor_hp(actor, 284, 0)
  76.       draw_actor_sp(actor, 460, 0)
  77.       @actor = actor
  78.       @text = nil
  79.       self.visible = true
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 设置敌人——RTAB有所变化
  84.   #     enemy : 要显示名字和状态的敌人
  85.   #--------------------------------------------------------------------------
  86.   def set_enemy(enemy)
  87.     text = enemy.name.sub(/\\[Ff]\[([0-9]+)\]/) {""}
  88.     state_text = make_battler_state_text(enemy, 112, false)
  89.     if state_text != ""
  90.       text += "  " + state_text
  91.     end
  92.     set_text(text, 1)
  93.   end
  94. end
复制代码
我把FUKI对话框的那个改变字体颜色的脚本移植过去了,这样一来,我以为在RM的特技、装备等注解窗口输入
\c[5]
就可以改变文字颜色了,结果发现两大问题
1.必须在开头输入才行,无法从中间输入来改变后面内容的颜色
2.更可怕的,吃字bug,有时候(例如返回主菜单然后重新进来)第一个字会消失,进而第二个,第三个……
dsu_plus_rewardpost_czw
作者: 各种压力的猫君    时间: 2011-10-13 19:28
本帖最后由 各种压力的猫君 于 2011-10-13 23:53 编辑
  1. #==============================================================================
  2. # ■ 让帮助窗口文字识别\C[n]以更换颜色
  3. #------------------------------------------------------------------------------
  4. #  插入到Window_Help脚本以下即可。
  5. #==============================================================================

  6. class Window_Help < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 设置文本
  9.   #     text  : 窗口显示的字符串
  10.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  11.   #--------------------------------------------------------------------------
  12.   def set_text(text, align = 0)
  13.     # 如果文本和对齐方式的至少一方与上次的不同
  14.     if text != @text or align != @align
  15.       # 再描绘文本
  16.       self.contents.clear
  17.       self.contents.font.color = normal_color
  18. #==============================================================================
  19. #     原描绘语句:
  20. #     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  21. #==============================================================================
  22. #     将原来的描绘方式改为一个字一个字描绘,以识别\C[n]更换颜色。
  23. #==============================================================================
  24.       # 因为前面已经用过了text所以这里改成colortext
  25.       colortext = text.clone
  26.       # 重置x坐标
  27.       x = 0
  28.       # 为了方便、将 "\\\\" 变换为 "\000"
  29.       colortext.gsub!(/\\\\/) { "\000" }
  30.       # "\\C" 变为 "\001"
  31.       colortext.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  32.       # c 获取 1 个字 (如果不能取得文字就循环)
  33.       while ((c = colortext.slice!(/./m)) != nil)
  34.         # \\ 的情况下
  35.         if c == "\000"
  36.           # 还原为本来的文字
  37.           c = "\\"
  38.         end
  39.         # \C[n] 的情况下
  40.         if c == "\001"
  41.           # 兼容1.03
  42.           c = ""
  43.           # 更改文字色
  44.           colortext.sub!(/\[([0-9]+)\]/, "")
  45.           color = $1.to_i
  46.           if color >= 0 and color <= 7
  47.             self.contents.font.color = text_color(color)
  48.           end
  49.           # 下面的文字
  50.           next
  51.         end
  52.         # 描绘文字
  53.         self.contents.draw_text(4 + x, 0, 40, 32, c, align)
  54.         # 推进x坐标
  55.         x += self.contents.text_size(c).width
  56.       end
  57. #==============================================================================
  58.       @text = text
  59.       @align = align
  60.       @actor = nil
  61.     end
  62.     self.visible = true
  63.   end
  64. end
复制代码
最终版
插入到Window_Help脚本以下或者自己把原来的描绘语句改成双分割线内的段落




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