设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1474|回复: 0
打印 上一主题 下一主题

对话框的位置

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
40 小时
注册时间
2007-8-11
帖子
113
跳转到指定楼层
1
发表于 2009-2-12 06:06:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-10 16:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表