Project1
标题: 帮助窗口试图做两种颜色的字,结果出现bug了 [打印本页]
作者: eve592370698    时间: 2011-10-13 18:54
标题: 帮助窗口试图做两种颜色的字,结果出现bug了
看看这个代码- class Window_Help < Window_Base
 
-   #--------------------------------------------------------------------------
 
-   # ● 初始化对像
 
-   #--------------------------------------------------------------------------
 
-   def initialize
 
-     super(0, 0, 800, 64)
 
-     self.contents = Bitmap.new(width - 32, height - 32)
 
-   end
 
-   #--------------------------------------------------------------------------
 
-   # ● 设置文本
 
-   #     text  : 窗口显示的字符串
 
-   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
 
-   #--------------------------------------------------------------------------
 
-   def set_text(text, align = 0)
 
-     # 如果文本和对齐方式的至少一方与上次的不同
 
-     if text != @text or align != @align
 
-       # 再描绘文本
 
-       self.contents.clear
 
-       self.contents.font.color = normal_color
 
-       # 为了方便、将 "\\\\" 变换为 "\000" 
 
-       text.gsub!(/\\\\/) { "\000" }
 
-       # "\\C" 变为 "\001"、"\\G" 变为 "\002"
 
-       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
 
-       text.gsub!(/\\[Gg]/) { "\002" }
 
-       #后面这些是自己从别处移植过来的
 
-       # c 获取 1 个字
 
-       if ((c = text.slice!(/./m)) != nil)        
 
-         case c
 
-         when "\000"       # \\ 的情况下 
 
-           # 还原为本来的文字
 
-           c = "\\"
 
-         when "\001"        #\C[n] 的情况下
 
-           # 更改文字色
 
-           text.sub!(/\[([0-9]+)\]/, "")
 
-           color = $1.to_i
 
-           if color >= 0 and color <= 7
 
-             self.contents.font.color = text_color(color)
 
-           end
 
-         when "\002"        # \G 的情况下
 
-         # 生成金钱窗口
 
-           if @gold_window == nil
 
-             @gold_window = Window_货币.new
 
-             @gold_window.x = 560 - @gold_window.width
 
-             if $game_temp.in_battle
 
-               @gold_window.y = 192
 
-             else
 
-             @gold_window.y = self.y >= 128 ? 32 : 384
 
-             end
 
-             @gold_window.opacity = self.opacity
 
-             @gold_window.back_opacity = self.back_opacity
 
-           end        
 
-         end        
 
-         #为了兼容1.03版本特别修改一下:
 
-         if c == "\001" or c == "\002" or c == "\003" or c == "\n"
 
-           c = ""        
 
-         end
 
-         # dx 为要描绘文字的宽度加法运算
 
-       end
 
-       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
 
-       @text = text
 
-       @align = align
 
-       @actor = nil
 
-     end
 
-     self.visible = true
 
-   end
 
-   #--------------------------------------------------------------------------
 
-   # ● 设置角色
 
-   #     actor : 要显示状态的角色
 
-   #--------------------------------------------------------------------------
 
-   def set_actor(actor)
 
-     if actor != @actor
 
-       self.contents.clear
 
-       draw_actor_name(actor, 4, 0)
 
-       draw_actor_state(actor, 140, 0)
 
-       draw_actor_hp(actor, 284, 0)
 
-       draw_actor_sp(actor, 460, 0)
 
-       @actor = actor
 
-       @text = nil
 
-       self.visible = true
 
-     end
 
-   end
 
-   #--------------------------------------------------------------------------
 
-   # ● 设置敌人——RTAB有所变化
 
-   #     enemy : 要显示名字和状态的敌人
 
-   #--------------------------------------------------------------------------
 
-   def set_enemy(enemy)
 
-     text = enemy.name.sub(/\\[Ff]\[([0-9]+)\]/) {""}
 
-     state_text = make_battler_state_text(enemy, 112, false)
 
-     if state_text != ""
 
-       text += "  " + state_text
 
-     end
 
-     set_text(text, 1)
 
-   end
 
- end
\c[5]
就可以改变文字颜色了,结果发现两大问题
1.必须在开头输入才行,无法从中间输入来改变后面内容的颜色
2.更可怕的,吃字bug,有时候(例如返回主菜单然后重新进来)第一个字会消失,进而第二个,第三个……