Project1

标题: 为什么显示不出来 [打印本页]

作者: 远恒    时间: 2009-2-11 04:53
标题: 为什么显示不出来

上面的文字为什么显示不出来
  1. #==============================================================================
  2. # 半身像对话框功能版 v 1.02 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 使用说明:
  5. #   ① 此脚本可代替默认 Window_Message 全脚本
  6. #
  7. #   ② 对话框第一行输入引号内文字"名称:",脚本会把名称提取出来美化显示
  8. #      例如"张三:",显示为"【张三】" ,美化符可在参数设定中修改
  9. #
  10. #   ③ 默认半身像在左边显示
  11. #      当您需要右边显示时,在第一行输入的名称之后加"@r"(大小写不限)
  12. #      例: "拉尔夫@r:"
  13. #          请注意此时半身像将进行左右翻转显示
  14. #
  15. #
  16. #   ④ 在对话中更改字体的方法:
  17. #       \f[sX]:更改字号为X
  18. #       \f[nX]:更改字体名称为"预设字体组"第X号字体 (预设字体组请看参数设定)
  19. #              更改字体名称失败(无指定字体或字体损坏)时,启用游戏默认字体
  20. #       \f[cX]:更改字色为第X号颜色 (text_color中的定义)
  21. #       \f[aX]:更改字体附加效果为第X号效果
  22. #              附加样式列表(X=0:无附加; X=1:阴影字; X=2:粗体字; X=3:描边字)
  23. #   ⑤ 在对话中显示(技能 物品 武器 防具)图标和名称的方法:
  24. #       \s[X]: 显示第X号技能图标和名称
  25. #       \i[X]: 显示第X号物品图标和名称
  26. #       \w[X]: 显示第X号武器图标和名称
  27. #       \a[X]: 显示第X号防具图标和名称
  28. #
  29. #   ⑥ 在对话中更改文字不透明度的方法:
  30. #       \o[X]: 把文字不透明度更改为X (取值范围在0~255)
  31. #
  32. #   ⑦ 指定时间后自动关闭对话框的方法:
  33. #       \x[X]: 对话框将在X帧后自动关闭
  34. #       \x:    省略参数时,将在AUTO_CLOSE帧后自动关闭 (AUTO_CLOSE在参数设定中)
  35. #
  36. #   ⑧ 调整文字显示速度的方法:
  37. #       \p[X]: 文字在X帧后显示
  38. #
  39. #   ⑨ 由于半身像占据文字显示宽度,您在设定文章时每行字数将减少
  40. #
  41. #   ⑩ 参数设定在脚本第55~81行
  42. #
  43. # 素材要求:
  44. #   ① 按vx默认头像素材(Graphics\Faces)的格式
  45. #      即每个素材文件由2行4列共8格头像组成
  46. #   ② 要求所有半身像朝向一致(默认是正面偏右)
  47. #==============================================================================
  48. # ■ Window_Message
  49. #==============================================================================
  50. class Window_Message < Window_Selectable
  51.   #--------------------------------------------------------------------------
  52.   # ○ 参数设定
  53.   #--------------------------------------------------------------------------
  54.   # 预设字体组
  55.   FONT_ARRAY = ["微软雅黑" ,"Simhei", "黑体", "DFKai-SB", "標楷體", "Verdana", "Arial Unicode MS"]
  56.   # 名称条参数
  57.   NAME_FONT_NAME = 0            # 名称文字字体在预设字体组中的序号
  58.   NAME_FONT_SIZE = 24           # 名称文字字号
  59.   NAME_FONT_COLOR = 16          # 名称文字颜色
  60.   NAME_FONT_ADJ = 3             # 名称文字附加效果
  61.   
  62.   NAME_X_ADJ = 6                # 名称条宽度缩进值
  63.   NAME_Y_ADJ = 6                # 名称与对话内容之间的附加距离
  64.   NAME_BAR_COLOR = 0            # 名称背景条颜色
  65.   NAME_BAR_OPACITY = 72         # 名称背景条透明度
  66.   AUTO_ADD = true               # 是否自动添加名称修饰符
  67.   SYMBOL = "【】"               # AUTO_ADD有效时为名称添加的修饰符(一对)
  68.   
  69.   # 半身像参数
  70.   FACE_X_ADJ = 62          # 半身像横坐标微调
  71.   FACE_Y_ADJ = -4               # 半身像纵坐标微调
  72.   
  73.   # 对话框参数
  74.   MSG_FONT_NAME = 1             # 对话文字字体在预设字体组中的序号
  75.   MSG_FONT_SIZE = 16            # 对话文字字号
  76.   MSG_FONT_COLOR = 1            # 对话文字颜色
  77.   MSG_FONT_ADJ = 2              # 对话文字附加效果
  78.   
  79.   # 自动关闭
  80.   AUTO_CLOSE = 80               # 默认自动关闭时间(以帧计时)
  81.   
  82.   #--------------------------------------------------------------------------
  83.   # ● 常量
  84.   #--------------------------------------------------------------------------
  85.   MAX_LINE = 4                            # 最大行数
  86.   #--------------------------------------------------------------------------
  87.   # ◎ 初始化对象
  88.   #--------------------------------------------------------------------------
  89.   def initialize
  90.     height = [NAME_FONT_SIZE, MSG_FONT_SIZE].max + 2 +
  91.              ( MSG_FONT_SIZE + 2) * 3 + NAME_Y_ADJ + 32
  92.     y = Graphics.height - height
  93.     super(0, y, 507, 88)
  94.     self.z = 200
  95.     self.active = false
  96.     self.index = -1
  97.     self.openness = 0
  98.     @opening = false            # 窗口正在打开的标志
  99.     @closing = false            # 窗口正在关闭的标志
  100.     @text = nil                 # 已经没有可显示的文章
  101.     @contents_x = 0             # 下一条文字描绘的 X 坐标
  102.     @contents_y = 0             # 下一条文字描绘的 Y 坐标
  103.     @line_count = 0             # 现在描绘的行数
  104.     @wait_count = 0             # 等待计数
  105.     @background = 0             # 背景类型
  106.     @position   = 0             # 显示位置
  107.     @show_fast = false          # 快速显示标志
  108.     @line_show_fast = false     # 以行为单位快速显示
  109.     @pause_skip = false         # 省略等待输入标志
  110.     # 字体附加效果
  111.     @font_adj = 1
  112.     create_gold_window
  113.     create_number_input_window
  114.     create_back_sprite
  115.     # 半身像左右判断
  116.     @show_right = false
  117.     # 半身像宽度
  118.     @face_width = 0
  119.     # 生成名称背景条
  120.     create_namebar_sprite
  121.     # 生成半身像
  122.     create_face_sprite
  123.     # 修改默认字体
  124.     contents.font = get_font(1)
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 释放
  128.   #--------------------------------------------------------------------------
  129.   def dispose
  130.     super
  131.     dispose_gold_window
  132.     dispose_number_input_window
  133.     dispose_back_sprite
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ◎ 更新画面
  137.   #--------------------------------------------------------------------------
  138.   def update
  139.     super
  140.     update_gold_window
  141.     update_number_input_window
  142.     update_back_sprite
  143.     update_show_fast
  144.     unless @opening or @closing             # 除窗口关闭以外
  145.       if @wait_count > 0                    # 文章内等待中
  146.         @wait_count -= 1
  147.       elsif self.pause                      # 等待文章翻页待机中
  148.         input_pause
  149.       elsif self.active                     # 正在输入选择项
  150.         input_choice
  151.       elsif @number_input_window.visible    # 正在输入数值
  152.         input_number
  153.       elsif @text != nil                    # 还有剩余的文章
  154.         update_message                        # 更新消息
  155.       elsif continue?                       # 继续的情况
  156.         start_message                         # 开始消息
  157.         open                                  # 打开窗口
  158.         $game_message.visible = true
  159.       else                                  # 不继续的情况
  160.         close                                 # 关闭窗口
  161.         $game_message.visible = @closing
  162.       end
  163.     end
  164.     # 自动关闭对话框
  165.     if @auto_close != nil
  166.       if @auto_close > 0
  167.         @auto_close -= 1
  168.       else
  169.         terminate_message
  170.       end
  171.     end
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ◎ 生成所持金窗口
  175.   #--------------------------------------------------------------------------
  176.   def create_gold_window
  177.     @gold_window = Window_Gold.new(384, 0)
  178.     @gold_window.openness = 0
  179.     # 统一字体
  180.     @gold_window.contents.font = get_font(1)
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ◎ 生成数值输入窗口
  184.   #--------------------------------------------------------------------------
  185.   def create_number_input_window
  186.     @number_input_window = Window_NumberInput.new
  187.     @number_input_window.visible = false
  188.     # 统一字体
  189.     @number_input_window.contents.font = get_font(1)
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 生成背景活动块
  193.   #--------------------------------------------------------------------------
  194.   def create_back_sprite
  195.     @back_sprite = Sprite.new
  196.     @back_sprite.bitmap = Cache.system("MessageBack")
  197.     @back_sprite.visible = (@background == 1)
  198.     @back_sprite.z = 190
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 释放所持金窗口
  202.   #--------------------------------------------------------------------------
  203.   def dispose_gold_window
  204.     @gold_window.dispose
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 释放数值输入窗口
  208.   #--------------------------------------------------------------------------
  209.   def dispose_number_input_window
  210.     @number_input_window.dispose
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 释放背景活动块
  214.   #--------------------------------------------------------------------------
  215.   def dispose_back_sprite
  216.     @back_sprite.dispose
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 更新所持金窗口
  220.   #--------------------------------------------------------------------------
  221.   def update_gold_window
  222.     @gold_window.update
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 更新数值输入窗口
  226.   #--------------------------------------------------------------------------
  227.   def update_number_input_window
  228.     @number_input_window.update
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 更新背景活动块
  232.   #--------------------------------------------------------------------------
  233.   def update_back_sprite
  234.     @back_sprite.visible = (@background == 1)
  235.     @back_sprite.y = y - 16
  236.     @back_sprite.opacity = openness
  237.     @back_sprite.update
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 更新快速显示标志
  241.   #--------------------------------------------------------------------------
  242.   def update_show_fast
  243.     if self.pause or self.openness < 255
  244.       @show_fast = false
  245.     elsif Input.trigger?(Input::C) and @wait_count < 2
  246.       @show_fast = true
  247.     elsif not Input.press?(Input::C)
  248.       @show_fast = false
  249.     end
  250.     if @show_fast and @wait_count > 0
  251.       @wait_count -= 1
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 判断下一消息继续显示
  256.   #--------------------------------------------------------------------------
  257.   def continue?
  258.     return true if $game_message.num_input_variable_id > 0
  259.     return false if $game_message.texts.empty?
  260.     if self.openness > 0 and not $game_temp.in_battle
  261.       return false if @background != $game_message.background
  262.       return false if @position != $game_message.position
  263.     end
  264.     return true
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ◎ 开始显示消息
  268.   #--------------------------------------------------------------------------
  269.   def start_message
  270.     # 重设窗口背景与位置
  271.     reset_window
  272.     # 还原半身像左右判断
  273.     @show_right = false
  274.     # 暂存消息
  275.     temp_texts = []
  276.     $game_message.texts.each {|text| temp_texts.push(text.clone)}
  277.     if temp_texts[0] != nil and temp_texts[0].include?(":")
  278.       # 半身像左右判断
  279.       if temp_texts[0].split(/@/)[1] =~ /[Rr]/
  280.         @show_right = true
  281.         temp_texts[0] = temp_texts[0].split(/@/)[0]
  282.       end
  283.       # 去冒号加修饰符(可选)
  284.       if AUTO_ADD
  285.         temp_texts[0].sub!(/\:/) { "" }
  286.         temp_texts[0] = SYMBOL[0,SYMBOL.size/2] +
  287.         temp_texts[0] + SYMBOL[SYMBOL.size/2,SYMBOL.size/2]
  288.       end
  289.       # 设定文字颜色
  290.       temp_texts[0] = "\\C[#{NAME_FONT_COLOR}]" +
  291.       temp_texts[0] + "\\C[#{MSG_FONT_COLOR}]"
  292.       # 设定文字字体
  293.       temp_texts[0] = "\\F[N#{NAME_FONT_NAME}]" +
  294.       temp_texts[0] + "\\F[N#{MSG_FONT_NAME}]"
  295.       # 设定文字大小
  296.       temp_texts[0] = "\\F[S#{NAME_FONT_SIZE}]" +
  297.       temp_texts[0] + "\\F[S#{MSG_FONT_SIZE}]"
  298.       # 设定文字附加效果
  299.       temp_texts[0] = "\\F[A#{NAME_FONT_ADJ}]" +
  300.       temp_texts[0] + "\\F[A#{MSG_FONT_ADJ}]"
  301.       # 显示名称背景条
  302.       show_namebar_sprite
  303.     end
  304.     @text = ""
  305.     for i in 0...temp_texts.size
  306.       @text += "  " if i >= $game_message.choice_start
  307.       @text += temp_texts[i].clone + "\x00"
  308.     end
  309.     @item_max = $game_message.choice_max
  310.     convert_special_characters
  311.     new_page
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ◎ 更换页面处理
  315.   #--------------------------------------------------------------------------
  316.   def new_page
  317.     contents.clear
  318.     # 初始化文字描绘起点
  319.     @contents_x = 50
  320.     # 除名称外文字右移1字符
  321.     @contents_x += MSG_FONT_SIZE+2 unless show_name?
  322.     if $game_message.face_name.empty?
  323.       @face_sprite.bitmap.clear
  324.     else
  325.       name = $game_message.face_name
  326.       index = $game_message.face_index
  327.       # 获取半身像宽度
  328.       get_face_width(name)
  329.       # 计算文字横坐标起始
  330.       @contents_x += @face_width-16 unless @show_right
  331.       draw_msg_face(name, index)
  332.       # 设定半身像坐标
  333.       set_face_pos
  334.     end
  335.     @contents_y = -17
  336.     @line_count = 0
  337.     @show_fast = false
  338.     @line_show_fast = false
  339.     @pause_skip = false
  340.     contents.font.color = text_color(0)
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ◎ 换行处理
  344.   #--------------------------------------------------------------------------
  345.   def new_line
  346.     @contents_x = 0
  347.     unless $game_message.face_name.empty?
  348.       # 半身像显示在左时
  349.       @contents_x = @face_width-16 unless @show_right
  350.     end
  351.     # 除名称外文字右移1字符
  352.     @contents_x += (MSG_FONT_SIZE+51)
  353.     # 显示名称之后,对话内容下移 NAME_Y_ADJ
  354.     @contents_y += NAME_Y_ADJ if @line_count == 0 and show_name?
  355.     # 以字号为新间距
  356.     @contents_y += (MSG_FONT_SIZE+7)
  357.     @line_count += 2
  358.     @line_show_fast = false
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ◎ 特殊文字变换
  362.   #--------------------------------------------------------------------------
  363.   def convert_special_characters
  364.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  365.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  366.     @text.gsub!(/\\N\[(\d+)\]/i)  { $game_actors[$1.to_i].name }
  367.     @text.gsub!(/\\C\[(\d+)\]/i)  { "\x01[#{$1}]" }
  368.     @text.gsub!(/\\G/)            { "\x02" }
  369.     @text.gsub!(/\\\./)           { "\x03" }
  370.     @text.gsub!(/\\\|/)           { "\x04" }
  371.     @text.gsub!(/\\!/)            { "\x05" }
  372.     @text.gsub!(/\\>/)            { "\x06" }
  373.     @text.gsub!(/\\</)            { "\x07" }
  374.     @text.gsub!(/\\\^/)           { "\x08" }
  375.     @text.gsub!(/\\\\/)           { "\\" }
  376.     # 更改不透明度
  377.     @text.gsub!(/\\O\[(\d+)\]/i)  { "\x09[#{$1}]" }
  378.     # 显示数据库元素
  379.     @text.gsub!(/\\S\[(\d+)\]/i)  { "\x0a[#{$1}]" + $data_skills[$1.to_i].name }
  380.     @text.gsub!(/\\I\[(\d+)\]/i)  { "\x0b[#{$1}]" + $data_items[$1.to_i].name }
  381.     @text.gsub!(/\\W\[(\d+)\]/i)  { "\x0c[#{$1}]" + $data_weapons[$1.to_i].name }
  382.     @text.gsub!(/\\A\[(\d+)\]/i)  { "\x0d[#{$1}]" + $data_armors[$1.to_i].name }
  383.     # 更改字体
  384.     @text.gsub!(/\\F\[S(\d+)\]/i) { "\x0e[#{$1}]" }
  385.     @text.gsub!(/\\F\[N(\d+)\]/i) { "\x0f[#{$1}]" }
  386.     @text.gsub!(/\\F\[C(\d+)\]/i) { "\x10[#{$1}]" }
  387.     # 字体附加效果
  388.     @text.gsub!(/\\F\[A(\d+)\]/i) { "\x11[#{$1}]" }
  389.     # 自动关闭
  390.     @text.gsub!(/\\X\[(\d+)\]/i)  { "\x12[#{$1}]" }
  391.     @text.gsub!(/\\X/i)            { "\x13" }
  392.     # 字速控制
  393.     @text.gsub!(/\\P\[(\d+)\]/i) { "\x14[#{$1}]" }
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ◎ 设置窗口背景与位置
  397.   #--------------------------------------------------------------------------
  398.   def reset_window
  399.     @background = $game_message.background
  400.     @position = $game_message.position
  401.     if @background == 50   #普通窗口
  402.       self.opacity = 255
  403.     else                  # 背景变暗、透明
  404.       self.opacity = 0
  405.     end
  406.     case @position
  407.     when 0  # 上
  408.       self.y = 0
  409.       @gold_window.y = 360
  410.     when 1  # 中
  411.       # 通过计算获取
  412.       self.y = (Graphics.height-self.height)/2
  413.       @gold_window.y = 0
  414.     when 2  # 下
  415.       # 通过计算获取
  416.       self.y = 300
  417.       @gold_window.y = 0
  418.     end
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ◎ 消息结束
  422.   #--------------------------------------------------------------------------
  423.   def terminate_message
  424.     self.active = false
  425.     self.pause = false
  426.     self.index = -1
  427.     @gold_window.close
  428.     @number_input_window.active = false
  429.     @number_input_window.visible = false
  430.     $game_message.main_proc.call if $game_message.main_proc != nil
  431.     $game_message.clear
  432.     # 还原自动关闭
  433.     @auto_close = nil
  434.     # 处理名称背景条和半身像
  435.     @namebar_sprite.visible = false
  436.     @face_sprite.visible = false
  437.     @face_sprite.bitmap.clear
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ◎ 更新消息
  441.   #--------------------------------------------------------------------------
  442.   def update_message
  443.     loop do
  444.       c = @text.slice!(/./m)            # 获取下一条文字
  445.       case c
  446.       when nil                          # 没有可以显示的文字
  447.         finish_message                  # 更新结束
  448.         break
  449.       when "\x00"                       # 换行
  450.         new_line
  451.         if @line_count >= MAX_LINE      # 行数为最大时
  452.           unless @text.empty?           # 如果还有增加则继续
  453.             self.pause = true           # 等待输入
  454.             break
  455.           end
  456.         end
  457.       when "\x01"                       # \C[n]  (更改文字色)
  458.         @text.sub!(/\[([0-9]+)\]/, "")
  459.         contents.font.color = text_color($1.to_i)
  460.         next
  461.       when "\x02"                       # \G  (显示所持金)
  462.         @gold_window.refresh
  463.         @gold_window.open
  464.       when "\x03"                       # \.  (等待 1/4 秒)
  465.         @wait_count = 15
  466.         break
  467.       when "\x04"                       # \|  (等待 1 秒)
  468.         @wait_count = 60
  469.         break
  470.       when "\x05"                       # \!  (等待输入)
  471.         self.pause = true
  472.         break
  473.       when "\x06"                       # \>  (瞬间显示 ON)
  474.         @line_show_fast = true
  475.       when "\x07"                       # \<  (瞬间显示 OFF)
  476.         @line_show_fast = false
  477.       when "\x08"                       # \^  (不等待输入)
  478.         @pause_skip = true
  479.       # 更改不透明度的情况下
  480.       when "\x09"
  481.         @text.sub!(/\[(\d+)\]/, "")
  482.         contents.font.color.alpha = $1.to_i
  483.       # 显示技能情况下
  484.       when "\x0a"
  485.         @text.sub!(/\[(\d+)\]/, "")
  486.         draw_icon($data_skills[$1.to_i].icon_index, @contents_x, @contents_y)
  487.         # 纵坐标增加图标宽度
  488.         @contents_x += 24
  489.       # 显示物品情况下
  490.       when "\x0b"
  491.         @text.sub!(/\[(\d+)\]/, "")
  492.         draw_icon($data_items[$1.to_i].icon_index, @contents_x, @contents_y)
  493.         # 纵坐标增加图标宽度
  494.         @contents_x += 24
  495.       # 显示武器情况下
  496.       when "\x0c"
  497.         @text.sub!(/\[(\d+)\]/, "")
  498.         draw_icon($data_weapons[$1.to_i].icon_index, @contents_x, @contents_y)
  499.         # 纵坐标增加图标宽度
  500.         @contents_x += 24
  501.       # 显示防具情况下
  502.       when "\x0d"
  503.         @text.sub!(/\[(\d+)\]/, "")
  504.         draw_icon($data_armors[$1.to_i].icon_index, @contents_x, @contents_y)
  505.         # 纵坐标增加图标宽度
  506.         @contents_x += 24
  507.       # 更改字体的情况下
  508.       when "\x0e"
  509.         @text.sub!(/\[(\d+)\]/, "")
  510.         contents.font.size = $1.to_i
  511.       when "\x0f"
  512.         @text.sub!(/\[(\d+)\]/, "")
  513.         contents.font.name = FONT_ARRAY[$1.to_i]
  514.       when "\x10"
  515.         @text.sub!(/\[(\d+)\]/, "")
  516.         contents.font.color = text_color($1.to_i)
  517.       # 字体附加效果
  518.       when "\x11"
  519.         @text.sub!(/\[(\d+)\]/, "")
  520.         # 获取字体显示速度
  521.         @font_adj = $1.to_i
  522.       # 自动关闭对话框的情况下
  523.       when "\x12"
  524.         @text.sub!(/\[(\d+)\]/, "")
  525.         @auto_close = $1.to_i
  526.       when "\x13"
  527.         @auto_close = AUTO_CLOSE
  528.       # \P[n] (字速)
  529.       when "\x14"
  530.         @text.sub!(/\[(\d+)\]/, "")
  531.         # 获取字体显示速度
  532.         @speed = $1.to_i
  533.       # 普通文字的情况下
  534.       else
  535.         # 速度控制
  536.         @wait_count = @speed if @speed != nil
  537.         font_height = contents.font.size + 2
  538.         case @font_adj
  539.         when 0
  540.           contents.font.shadow = false
  541.           contents.font.bold   = false
  542.           contents.draw_text(@contents_x, @contents_y, 40, font_height, c)
  543.         when 1
  544.           contents.font.shadow = true
  545.           contents.font.bold   = false
  546.           contents.draw_text(@contents_x, @contents_y, 40, font_height, c)
  547.         when 2
  548.           contents.font.shadow = false
  549.           contents.font.bold   = true
  550.           contents.draw_text(@contents_x, @contents_y, 40, font_height, c)
  551.         when 3
  552.           contents.font.shadow = false
  553.           contents.font.bold   = false
  554.           contents.draw_stroke_text(@contents_x, @contents_y, 40, font_height, c)
  555.         end
  556.         c_width = contents.text_size(c).width
  557.         @contents_x += c_width
  558.       end
  559.       break unless @show_fast or @line_show_fast
  560.     end
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ◎ 消息更新结束
  564.   #--------------------------------------------------------------------------
  565.   def finish_message
  566.     if $game_message.choice_max > 0
  567.       start_choice
  568.     elsif $game_message.num_input_variable_id > 0
  569.       start_number_input
  570.     elsif @pause_skip
  571.       terminate_message
  572.     else
  573.       self.pause = true
  574.     end
  575.     @wait_count = 10
  576.     @text = nil
  577.   end
  578.   #--------------------------------------------------------------------------
  579.   # ● 开始选择项
  580.   #--------------------------------------------------------------------------
  581.   def start_choice
  582.     self.active = true
  583.     self.index = 0
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ◎ 开始输入数值
  587.   #--------------------------------------------------------------------------
  588.   def start_number_input
  589.     digits_max = $game_message.num_input_digits_max
  590.     number = $game_variables[$game_message.num_input_variable_id]
  591.     @number_input_window.digits_max = digits_max
  592.     @number_input_window.number = number
  593.     if $game_message.face_name.empty?
  594.       @number_input_window.x = x
  595.     else
  596.       # 代入半身像宽度
  597.       @number_input_window.x = x + @face_width
  598.     end
  599.     @number_input_window.y = y + @contents_y
  600.     @number_input_window.active = true
  601.     @number_input_window.visible = true
  602.     @number_input_window.update
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ◎ 更新光标 #可能仍须增加判断
  606.   #--------------------------------------------------------------------------
  607.   def update_cursor
  608.     if @index >= 0
  609.       if $game_message.face_name.empty?
  610.         x = 0
  611.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2)
  612.         width = contents.width
  613.       else
  614.         x = @show_right ? 0 : @face_width
  615.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2) + NAME_Y_ADJ
  616.         width = contents.width - @face_width
  617.       end
  618.       self.cursor_rect.set(x, y, width, (MSG_FONT_SIZE+2))
  619.     else
  620.       self.cursor_rect.empty
  621.     end
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● 文章显示输入处理
  625.   #--------------------------------------------------------------------------
  626.   def input_pause
  627.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  628.       self.pause = false
  629.       if @text != nil and not @text.empty?
  630.         new_page if @line_count >= MAX_LINE
  631.       else
  632.         terminate_message
  633.       end
  634.     end
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 选择项输入处理
  638.   #--------------------------------------------------------------------------
  639.   def input_choice
  640.     if Input.trigger?(Input::B)
  641.       if $game_message.choice_cancel_type > 0
  642.         Sound.play_cancel
  643.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  644.         terminate_message
  645.       end
  646.     elsif Input.trigger?(Input::C)
  647.       Sound.play_decision
  648.       $game_message.choice_proc.call(self.index)
  649.       terminate_message
  650.     end
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● 数值输入处理
  654.   #--------------------------------------------------------------------------
  655.   def input_number
  656.     if Input.trigger?(Input::C)
  657.       Sound.play_decision
  658.       $game_variables[$game_message.num_input_variable_id] =
  659.         @number_input_window.number
  660.       $game_map.need_refresh = true
  661.       terminate_message
  662.     end
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ○ 生成名称背景条
  666.   #--------------------------------------------------------------------------
  667.   def create_namebar_sprite
  668.     @namebar_sprite = Sprite.new
  669.     @namebar_sprite.bitmap = Bitmap.new(Graphics.width-NAME_X_ADJ, NAME_FONT_SIZE+4)
  670.     # 可视性
  671.     @namebar_sprite.visible = false
  672.     # 准备参数
  673.     rect = Rect.new(NAME_X_ADJ, 0, @namebar_sprite.width, @namebar_sprite.height)
  674.     color1 = text_color(NAME_BAR_COLOR)
  675.     color2 = text_color(NAME_BAR_COLOR)
  676.     color1.alpha = NAME_BAR_OPACITY
  677.     color2.alpha = 0
  678.     # 描绘渐变条
  679.     @namebar_sprite.bitmap.gradient_fill_rect(rect, color1, color2)
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ○ 生成半身像
  683.   #--------------------------------------------------------------------------
  684.   def create_face_sprite
  685.     @face_sprite = Sprite.new
  686.     @face_sprite.bitmap = Bitmap.new(1,1)
  687.     @face_sprite.z = self.z + 2
  688.     @face_sprite.visible = false
  689.     @old_name = ""                        # 判断头像是否改变
  690.     @old_index = 0                        # 判断头像是否改变
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # ○ 显示名称背景条
  694.   #--------------------------------------------------------------------------
  695.   def show_namebar_sprite
  696.     # 坐标跟随
  697.     @namebar_sprite.x = self.x
  698.     @namebar_sprite.y = self.y + 16 - 1
  699.     @namebar_sprite.z = self.z + 1
  700.     # 可视性
  701.     @namebar_sprite.visible = true
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ○ 描绘半身像
  705.   #     face_name  : 半身像图像文件名
  706.   #     face_index : 半身像图像索引
  707.   #--------------------------------------------------------------------------
  708.   def draw_msg_face(face_name, face_index)
  709.     bitmap = Cache.face(face_name)
  710.     width = bitmap.width / 4
  711.     height = bitmap.height / 2
  712.     rect = Rect.new(0, 0, 0, 0)
  713.     rect.x = face_index % 4 * width
  714.     rect.y = face_index / 4 * height
  715.     rect.width = width
  716.     rect.height = height
  717.     @face_sprite.bitmap = Bitmap.new(width, height)
  718.     @face_sprite.bitmap.blt(0, 0, bitmap, rect)
  719.     @face_sprite.mirror = @show_right
  720.     bitmap.dispose
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ○ 是否显示名称
  724.   #--------------------------------------------------------------------------
  725.   def show_name?
  726.     return @namebar_sprite.visible
  727.   end
  728.   #--------------------------------------------------------------------------
  729.   # ○ 返回字体
  730.   #     index       : 编号
  731.   #--------------------------------------------------------------------------
  732.   def get_font(index)
  733.     case index
  734.     when 0
  735.       name = [FONT_ARRAY[NAME_FONT_NAME], Font.default_name].flatten!
  736.       size = NAME_FONT_SIZE
  737.       font = Font.new(name, size)
  738.     when 1
  739.       name = [FONT_ARRAY[MSG_FONT_NAME], Font.default_name].flatten!
  740.       size = MSG_FONT_SIZE
  741.       font = Font.new(name, size)
  742.     else
  743.       name = [FONT_ARRAY[index],Font.default_name].flatten!
  744.       font = Font.new(name)
  745.     end
  746.     return font
  747.   end
  748.   #--------------------------------------------------------------------------
  749.   # ○ 获取半身像宽度
  750.   #     face_name  : 半身像图像文件名
  751.   #--------------------------------------------------------------------------
  752.   def get_face_width(face_name)
  753.     bitmap = Cache.face(face_name)
  754.     @face_width = bitmap.width / 4
  755.     bitmap.dispose
  756.   end
  757.   #--------------------------------------------------------------------------
  758.   # ○ 设定半身像位置
  759.   #--------------------------------------------------------------------------
  760.   def set_face_pos
  761.     @face_sprite.y = self.y + (self.height-@face_sprite.height) + FACE_Y_ADJ
  762.     if @show_right
  763.       @face_sprite.x = self.width - @face_sprite.width - FACE_X_ADJ
  764.     else
  765.       @face_sprite.x = self.x + FACE_X_ADJ
  766.     end
  767.     # 可视性
  768.     @face_sprite.visible = true
  769.   end
  770. end
  771. #==============================================================================
  772. # ■ Bitmap
  773. #==============================================================================
  774. class Bitmap
  775.   def draw_stroke_text(x, y, width, height, str, align = 0)
  776.     old_color = self.font.color.clone
  777.     self.font.color.set(0, 0, 0,old_color.alpha)
  778.     # 描绘边缘
  779.     self.draw_text(x-1, y-1, width, height, str, align)
  780.     self.draw_text(x-1, y+1, width, height, str, align)
  781.     self.draw_text(x+1, y-1, width, height, str, align)
  782.     self.draw_text(x+1, y+1, width, height, str, align)
  783.     self.draw_text(x, y-1, width, height, str, align)
  784.     self.draw_text(x, y+1, width, height, str, align)
  785.     self.draw_text(x-1, y, width, height, str, align)
  786.     self.draw_text(x+1, y, width, height, str, align)
  787.     # 描绘主文字
  788.     self.font.color = old_color
  789.     self.draw_text(x, y, width, height, str, align)
  790.   end
  791. end
复制代码
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: njx937    时间: 2009-2-11 05:02
文本框的大小问题,个人感觉是越界了
contents.draw_stroke_text(@contents_x, @contents_y, 40, font_height, c)
font_height,估计是这个位置的值作祟。。
框不够大
。。可能吧。。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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