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

Project1

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

[已经解决] 关于fuki对话框的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
22 小时
注册时间
2011-8-18
帖子
17
跳转到指定楼层
1
发表于 2011-8-20 09:22:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 亿万星辰 于 2011-8-20 09:44 编辑

当遇到选项出现的时候,最后一行字无法完全显示,这个要怎么解决?


求大神指教。TAT。



脚本:
  1. module FUKI

  2.   # 头像图片保存目录的设定
  3.   HEAD_PIC_DIR = "Graphics/Heads/"

  4.   # 是否显示尾部图标
  5.   TAIL_SHOW = true
  6.   
  7.   # Skin的设定
  8.   # 使用数据库默认窗口Skin情况下这里使用[""]
  9.   FUKI_SKIN_NAME = "001-Blue15"   # 呼出对话框用Skin
  10.   NAME_SKIN_NAME = "001-Blue15"   # 角色名字窗口用Skin
  11.   
  12.   # 字体大小
  13.   MES_FONT_SIZE = 20    # 呼出对话框
  14.   NAME_FONT_SIZE = 14   # 角色名字窗口
  15.   
  16.   # 字体颜色
  17.   #(设定为 Color.new(0, 0, 0, 0) 表示使用普通文字色)
  18.   FUKI_COLOR = Color.new(255, 255, 255, 255)  # 呼出对话框
  19.   NAME_COLOR = Color.new(255, 255, 255, 255)  # 角色名字窗口
  20.   
  21.   # 窗口透明度
  22.   # 如修改窗口透明度请同时修改尾部箭头图形内部的透明度
  23.   FUKI_OPACITY = 255    # 呼出对话框
  24.   MES_OPACITY = 255     # 默认信息窗口
  25.   NAME_OPACITY = 255    # 角色名字窗口
  26.   
  27.   # 角色名字窗口的相对位置
  28.   NAME_SHIFT_X = 0      # 横坐标
  29.   NAME_SHIFT_Y = 16     # 纵坐标
  30.   
  31.   # 窗口表示时是否根据画面大小自动检查窗口出现的位置,
  32.   # 自动改变位置( true / false )
  33.   # 设置成 true 可能出现箭头图标颠倒的问题 <- bbschat
  34.   POS_FIX = false

  35.   # 在画面最边缘表示时的稍微挪动
  36.   # 使用圆形Skin的角和方框的角重合的情况下为 true
  37.   CORNER_SHIFT = false
  38.   SHIFT_PIXEL = 4   # true 时挪动的象素
  39.   
  40.   # 角色高度尺寸
  41.   CHARACTOR_HEIGHT = 48
  42.   # 呼出对话框的相对位置(纵坐标)
  43.   POP_SHIFT_TOP = 0         # 表示位置为上的时候
  44.   POP_SHIFT_UNDER = 0       # 表示位置为下的时候
  45.   
  46.   # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  47.   # 游戏中 可随时用数字代入 $mes_speed 来改变消息表示速度。
  48.   MES_SPEED = 1
  49.   # 默认的文字自动消失时间为60帧
  50.   DEFAULT_AUTO_CLOSE_TIME = 60
  51. end

  52. #==============================================================================
  53. # 方便用户同时设置2个常用参数而使用的函数
  54. #==============================================================================
  55. def chat(id = 0,name = "")
  56.   $mes_id = id
  57.   $mes_name = name
  58. end

  59. #==============================================================================
  60. # □ Game_Temp
  61. #==============================================================================

  62. class Game_Temp
  63.   attr_accessor  :namebmp              #保存头像图片的Hash表
  64.   alias initialize_fuki initialize
  65.   def initialize
  66.     initialize_fuki
  67.     # 如果不想使用角色名字直接作为头像文件名
  68.     # 可在这里重新设定角色名字与文件名的对应关系
  69. @namebmp ={}
  70.   end
  71. end

  72. #==============================================================================
  73. # □ Window_FukiMessage
  74. #==============================================================================

  75. class Window_FukiMessage < Window_Selectable

  76.   #--------------------------------------------------------------------------
  77.   # ● 初始化状态
  78.   #--------------------------------------------------------------------------
  79.   def initialize
  80.     super(80, 304, 480, 160)
  81.     self.contents = Bitmap.new(width - 32, height - 32)
  82.     self.visible = false
  83.     self.z = 9998
  84.     @fade_in = false
  85.     @fade_out = false
  86.     @contents_showing = false
  87.     @cursor_width = 0
  88.     self.active = false
  89.     self.index = -1
  90.     @w = 0
  91.     @h = 0
  92.     @wait = 0
  93.     @dx = 0
  94.     @dy = 0
  95.     $mes_speed = FUKI::MES_SPEED
  96.     @auto_close=-1
  97.   end
  98.   
  99.   #--------------------------------------------------------------------------
  100.   # ○ 决定窗口尺寸并生成窗口
  101.   #--------------------------------------------------------------------------
  102.   def refresh_create
  103.     self.contents.clear
  104.     self.contents.font.color = normal_color
  105.     self.contents.font.size = FUKI::MES_FONT_SIZE
  106.     # 取得窗口尺寸
  107.     get_windowsize
  108.     w = @w + 32 + 8
  109.     h = @h * (self.contents.font.size + 10) + 26
  110.     # 生成呼出窗口
  111.     set_fukidasi(self.x, self.y, w, h)
  112.     # 生成角色名字窗口
  113.     set_namewindow
  114.     # 初始化信息表示使用的变量
  115.     @dx = @dy = 0
  116.     @cursor_width = 0
  117.     @contents_drawing = true
  118.     # ■■■■■ 任何时候都瞬间显示 ■■■■■■
  119.     if $mes_speed == 1
  120.       $mes_speed = 0
  121.     end
  122.     #■■■■■■■■■■■■■■■■■■■■■
  123.     # 瞬间表示的情况下
  124.     if $mes_speed == 0
  125.       # 循环信息描绘处理
  126.       while $game_temp.message_text != ""
  127.         draw_massage
  128.       end
  129.       draw_opt_text
  130.       @contents_showing_end = true
  131.       @contents_drawing = false
  132.     else
  133.       # 一个一个描绘文字
  134.       refresh_drawtext
  135.     end
  136.   end
  137.   
  138.   #--------------------------------------------------------------------------
  139.   # ○ 一个一个描绘文字
  140.   #--------------------------------------------------------------------------
  141.   def refresh_drawtext
  142.     if $game_temp.message_text != nil
  143.       if @wait > 0
  144.         @wait -= 1
  145.       elsif @wait == 0
  146.         # 描绘处理
  147.         draw_massage
  148.         @wait = $mes_speed
  149.       end
  150.     end
  151.     # 描绘结束
  152.     if $game_temp.message_text == ""
  153.       draw_opt_text
  154.       @contents_showing_end = true
  155.       @contents_drawing = false
  156.     end
  157.   end
  158.   
  159.   #--------------------------------------------------------------------------
  160.   # ○ 取得窗口尺寸
  161.   #--------------------------------------------------------------------------
  162.   def get_windowsize
  163.     x = y = 0
  164.     @h = @w = 0
  165.     @cursor_width = 0
  166.     # 有选择项的话,处理字的缩进
  167.     if $game_temp.choice_start == 0
  168.       x = 16
  169.     end
  170.     # 有等待显示的文字的情况下
  171.     if $game_temp.message_text != nil
  172.     text = $game_temp.message_text.clone
  173.       # 限制文字处理
  174.       begin
  175.         last_text = text.clone
  176.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  177.       end until text == last_text
  178.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  179.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  180.       end
  181.       # 为了方便、将 "\\\\" 变换为 "\000"
  182.       text.gsub!(/\\\\/) { "\000" }
  183.       # "\\C" 变为 "\001" 、"\\G" 变为 "\002"
  184.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001" }
  185.       text.gsub!(/\\[Gg]/) { "\002" }
  186.       text.slice!(/\\[Aa]\[(\w+)\]/) { "" }
  187.       # c 获取 1 个字 (如果不能取得文字就循环)
  188.       while ((c = text.slice!(/./m)) != nil)
  189.         # \\ 的情况下
  190.         if c == "\000"
  191.           # 还原为本来的文字
  192.           c = "\\"
  193.         end
  194.         # \C[n] 或者 \G 的情况下
  195.         if c == "\001" or c == "\002"
  196.           # 下面的文字
  197.           next
  198.         end
  199.         # 另起一行文字的情况下
  200.         if c == "\n"
  201.           # y 累加 1
  202.           y += 1
  203.           # 取得纵横尺寸
  204.           @h = y
  205.           @w = x > @w ? x : @w
  206.           if y >= $game_temp.choice_start
  207.             @w = x + 8 > @w ? x + 8 : @w
  208.           end
  209.           x = 0
  210.           # 移动到选择项的下一行
  211.           if y >= $game_temp.choice_start
  212.             x = 8
  213.           end
  214.           # 下面的文字
  215.           next
  216.         end
  217.         # x 为要描绘文字的宽度加法运算
  218.         x += self.contents.text_size(c).width
  219.       end
  220.     end
  221.     # 输入数值的情况
  222.     if $game_temp.num_input_variable_id > 0
  223.       digits_max = $game_temp.num_input_digits_max
  224.       number = $game_variables[$game_temp.num_input_variable_id]
  225.       @h += 1
  226.       x = digits_max * self.contents.font.size + 16
  227.       @w = x > @w ? x : @w
  228.     end
  229.   end
  230.   
  231.   #--------------------------------------------------------------------------
  232.   # ○ 描绘信息处理
  233.   #--------------------------------------------------------------------------
  234.   def draw_massage
  235.     # 有等待显示的文字的情况下
  236.     if $game_temp.message_text != nil
  237.       text = $game_temp.message_text
  238.       # 限制文字处理
  239.       begin
  240.         last_text = text.clone
  241.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  242.       end until text == last_text
  243.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  244.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  245.       end
  246.       # 为了方便、将 "\\\\" 变换为 "\000"
  247.       text.gsub!(/\\\\/) { "\000" }
  248.       # "\\C" 变为 "\001"、"\\G" 变为 "\002"
  249.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  250.       text.gsub!(/\\[Gg]/) { "\002" }
  251.       # "\\/" 删除行尾换行符号
  252.       text.gsub!(/\\\/\n/) {""}
  253.       # 去掉不在行尾的"\\/"符号,防止出错
  254.       text.gsub!(/\\\//) {""}
  255.       if text.slice!(/\\[Aa]\[(\w+)\]/)!=nil
  256.         @auto_close=$1.to_i
  257.       else
  258.         if text.slice!(/\\[Aa]/)!=nil
  259.           @auto_close = FUKI::DEFAULT_AUTO_CLOSE_TIME
  260.         end
  261.       end
  262.       # c 获取 1 个字
  263.       if ((c = text.slice!(/./m)) != nil)
  264.         # 选择项的情况
  265.         if @dy >= $game_temp.choice_start
  266.           # 处理字的缩进
  267.           @dx = 8
  268.           # 描绘文字
  269.           self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  270.           # x 为要描绘文字宽度的加法运算
  271.           @dx += self.contents.text_size(c).width
  272.           # 循环
  273.           while ((c = text.slice!(/./m)) != "\n")
  274.             # 描绘文字
  275.             self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
  276.             # x 为要描绘文字宽度的加法运算
  277.             @dx += self.contents.text_size(c).width
  278.           end
  279.           if c == "\n"
  280.             # 更新光标宽度
  281.             @cursor_width = [@cursor_width, @dx].max
  282.             # dy 累加 1
  283.             @dy += 1
  284.             @dx = 0
  285.           end
  286.           return
  287.         end
  288.         # \\ 的情况下
  289.         if c == "\000"
  290.           # 还原为本来的文字
  291.           c = "\\"
  292.         end
  293.         #\C[n] 的情况下
  294.         if c == "\001"
  295.           # 更改文字色
  296.           text.sub!(/\[([0-9]+)\]/, "")
  297.           color = $1.to_i
  298.           if color >= 0 and color <= 7 or color == 10
  299.             self.contents.font.color = text_color(color)
  300.           end
  301.         end
  302.         # \G 的情况下
  303.         if c == "\002"
  304.           # 生成金钱窗口
  305.           if @gold_window == nil
  306.             @gold_window = Window_Gold.new
  307.             @gold_window.x = 560 - @gold_window.width
  308.             if $game_temp.in_battle
  309.               @gold_window.y = 192
  310.             else
  311.               @gold_window.y = self.y >= 128 ? 32 : 384
  312.             end
  313.             @gold_window.opacity = self.opacity
  314.             @gold_window.back_opacity = self.back_opacity
  315.           end
  316.         end
  317.         # 另起一行文字的情况下
  318.         if c == "\n"
  319.           # dy 累加 1
  320.           @dy += 1
  321.           @dx = 0
  322.         end
  323.         # 描绘文字
  324.         self.contents.font.size = FUKI::MES_FONT_SIZE
  325.         font_size = self.contents.font.size
  326.          if c == "\001" or c == "\002" or c == "\003" or c == "\n"
  327.         c = ""
  328.       else
  329.         self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
  330.       end
  331.         # dx 为要描绘文字的宽度加法运算
  332.         @dx += self.contents.text_size(c).width
  333.       end
  334.     end
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ○ 选择项和输入数值的情况下
  338.   #--------------------------------------------------------------------------
  339.   def draw_opt_text
  340.     # 选择项的情况下
  341.     if $game_temp.choice_max > 0
  342.       @item_max = $game_temp.choice_max
  343.       self.active = true
  344.       self.index = 0
  345.     end
  346.     # 输入数值的情况下
  347.     if $game_temp.num_input_variable_id > 0
  348.       digits_max = $game_temp.num_input_digits_max
  349.       number = $game_variables[$game_temp.num_input_variable_id]
  350.       @input_number_window = Window_InputNumber.new(digits_max)
  351.       @input_number_window.number = number
  352.       @input_number_window.x = self.x + 8
  353.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  354.     end
  355.   end
  356.   
  357.   #--------------------------------------------------------------------------
  358.   # ○ 设置呼出对话框
  359.   #--------------------------------------------------------------------------
  360.   def set_fukidasi(x, y, width, height)
  361.     # $mes_id 为空的时候,不显示呼出对话框
  362.     if $mes_id == nil or $mes_id == ""
  363.       del_fukidasi
  364.       reset_window
  365.     else
  366.       # 不显示暂停标志
  367.       self.pause = false
  368.       # 取得对话框位置
  369.       pos = get_fuki_pos(width, height)
  370.       x = pos[0]
  371.       y = pos[1]
  372.       skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
  373.       # 生成呼出对话框
  374.       self.windowskin = RPG::Cache.windowskin(skin)
  375.       self.x = x
  376.       self.y = y
  377.       self.height = height
  378.       self.width = width
  379.       self.contents.dispose
  380.       self.contents = Bitmap.new(width - 32, height - 32)
  381.       self.back_opacity = FUKI::FUKI_OPACITY
  382.       self.contents.clear
  383.       self.contents.font.color = normal_color
  384.       self.contents.font.size = FUKI::MES_FONT_SIZE
  385.       # 描绘尾部图标
  386.       if $game_system.message_frame == 0
  387.         # 取得位置
  388.         tale_pos = get_tale_pos
  389.         @tale = Sprite.new
  390.         # 是否显示尾部图标 <- bbschat
  391.         if FUKI::TAIL_SHOW == true
  392.           case @message_position
  393.             when 0  # 上
  394.               @tale.bitmap = RPG::Cache.windowskin(skin + "-top")
  395.               @tale.x = tale_pos[0]
  396.               @tale.y = tale_pos[1]
  397.               @tale.z = self.z + 1
  398.             when 1  # 中
  399.               @tale.dispose
  400.               @tale = nil
  401.             when 2  # 下
  402.               @tale.bitmap = RPG::Cache.windowskin(skin + "-under")
  403.               @tale.x = tale_pos[0]
  404.               @tale.y = tale_pos[1]
  405.               @tale.z = self.z + 1
  406.           end
  407.         end
  408.       end
  409.     end
  410.   end
  411.   
  412.   #--------------------------------------------------------------------------
  413.   # ○ 计算呼出对话框的位置
  414.   #--------------------------------------------------------------------------
  415.   def get_fuki_pos(width, height)
  416.    
  417.     # 取得角色
  418.     @character = get_character($mes_id)
  419.     if @character == nil
  420.       # 角色不存在的情况下使用默认信息框
  421.       del_fukidasi
  422.       reset_window
  423.       return
  424.     end
  425.     # 处理坐标
  426.     x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - (width / 2)
  427.     # 为尽量显示在画面内而移动横坐标
  428.     if x + width > 640
  429.       x = 640 - width
  430.     elsif x < 0
  431.       x = 0
  432.     end
  433.     # 决定窗口位置
  434.     case $game_system.message_position
  435.       when 0  # 上
  436.         y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  437.       when 1  # 中
  438.         y = (480 - height) / 2
  439.         x = (640 - width) / 2
  440.       when 2  # 下
  441.         y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  442.     end
  443.     # 纪录文章显示位置
  444.     @message_position = $game_system.message_position
  445.     # 如果选择自动修正,则如果文章会显示到画面外则自动改变窗口的尺寸(高度)
  446.     if FUKI::POS_FIX
  447.       case @message_position
  448.         when 0  # 上
  449.           if y <= 0
  450.             @message_position = 2
  451.             y =  (@character.real_y - $game_map.display_y + 64) * 32 / 128 + 32 + FUKI::POP_SHIFT_UNDER
  452.           end
  453.         when 2  # 下
  454.           if y + height >= 480
  455.             p "上"
  456.             @message_position = 0
  457.             y = (@character.real_y - $game_map.display_y + 64) * 32 / 128 - height - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
  458.           end
  459.       end
  460.     end
  461.     return [x,y]
  462.    
  463.   end
  464.   
  465.   #--------------------------------------------------------------------------
  466.   # ○ 计算尾部图标的位置
  467.   #--------------------------------------------------------------------------
  468.   def get_tale_pos
  469.     case @message_position
  470.       when 0  # 上
  471.         # 处理坐标
  472.         x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  473.         # 画面边缘的话则移动位置
  474.         if FUKI::CORNER_SHIFT
  475.           if x == 0
  476.             x = FUKI::SHIFT_PIXEL
  477.           elsif x == 640 - 32
  478.             x = 640 - 32 - FUKI::SHIFT_PIXEL
  479.           end
  480.         end
  481.         y = self.y + self.height - 16
  482.       when 1  # 中
  483.         x = nil
  484.         y = nil
  485.       when 2  # 下
  486.         # 处理坐标
  487.         x = ( @character.real_x - $game_map.display_x + 64 ) * 32 / 128 - 16
  488.         # 画面边缘的话则移动位置
  489.         if FUKI::CORNER_SHIFT
  490.           if x == 0
  491.             x = FUKI::SHIFT_PIXEL
  492.           elsif @tale.x == 640 - 32
  493.             x = 640 - 32 - FUKI::SHIFT_PIXEL
  494.           end
  495.         end
  496.         y = self.y - 16
  497.     end
  498.     return [x,y]
  499.   end

  500.   #--------------------------------------------------------------------------
  501.   # ○ 计算名字窗口的位置
  502.   #--------------------------------------------------------------------------
  503.   def get_name_pos
  504.     case @face_pic_txt
  505.       when 0  # 文字
  506.         x = self.x + FUKI::NAME_SHIFT_X
  507.         y = self.y - FUKI::NAME_FONT_SIZE - 16 + FUKI::NAME_SHIFT_Y
  508.       when 1  # 图片
  509.         if self.x >= @pic_width + 5
  510.           # 默认头像显示在对话框左边
  511.           x = self.x-@pic_width-5
  512.         else
  513.           # 对话框左边放不下时头像显示在右边
  514.           x = self.x + self.width
  515.         end
  516.         y = self.y+self.height/2 - (@pic_height + 5)/2
  517.       end

  518.     return [x,y]
  519.   end
  520.   
  521.   #--------------------------------------------------------------------------
  522.   # ○ 设置角色名字窗口
  523.   #--------------------------------------------------------------------------
  524.   def set_namewindow
  525.    
  526.     # $mes_name为空时不显示角色名字窗口
  527.     if $mes_name == nil or $mes_name == ""
  528.       return
  529.     else
  530.       # 设定变量
  531.       mes_name = $mes_name
  532.       skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
  533.       
  534.       #判断名称是否有对应的图片"Graphics/heads/" +
  535.       if $game_temp.namebmp[mes_name] == nil then
  536.         sFile = "Graphics/heads/" + mes_name + ".jpg"
  537.       else
  538.         sFile = "Graphics/heads/" + $game_temp.namebmp[mes_name] + ".jpg"
  539.       end
  540.       
  541.       begin
  542.         bmp = Bitmap.new(sFile)
  543.         @face_pic_txt = 1                       #名字窗口使用头像<- bbschat
  544.         
  545.         # 生成头像
  546.         
  547.         @pic_width = bmp.width
  548.         @pic_height = bmp.height
  549.         
  550.         if self.x >= @pic_width + 5
  551.           # 默认头像显示在对话框左边
  552.           name_x = self.x-@pic_width-5
  553.         else
  554.           # 对话框左边放不下时头像显示在右边
  555.           name_x = self.x + self.width
  556.         end
  557.         name_y = self.y+self.height/2 - (@pic_height + 5)/2
  558.         
  559.         # 生成角色头像窗口
  560.         @name_win = Window_Base.new(name_x, name_y, @pic_width + 5, @pic_height + 5)
  561.         @name_win.windowskin = RPG::Cache.windowskin(skin)
  562.         @name_win.back_opacity =0     
  563.         @name_win.z = self.z + 1
  564.         
  565.         @name_contents = Sprite.new
  566.         @name_contents.x = name_x + 2
  567.         @name_contents.y = name_y + 2
  568.         @name_contents.bitmap = bmp
  569.         #@name_contents.z = @name_win.z + 2     #这个用了似乎效果不好<- bbschat
  570.         
  571.       rescue
  572.         
  573.         @face_pic_txt = 0                       #名字窗口使用文字<- bbschat

  574.         # 生成名字
  575.         name_width = mes_name.size / 2 * FUKI::NAME_FONT_SIZE
  576.         name_height = FUKI::NAME_FONT_SIZE
  577.         name_x = self.x + FUKI::NAME_SHIFT_X
  578.         name_y = self.y - name_height - 16 + FUKI::NAME_SHIFT_Y

  579.         # 生成角色名字窗口(只有边框)
  580.         @name_win = Window_Base.new(name_x, name_y, name_width + 16, name_height + 16)
  581.         @name_win.windowskin = RPG::Cache.windowskin(skin)
  582.         @name_win.back_opacity = FUKI::NAME_OPACITY
  583.         @name_win.z = self.z + 1
  584.         
  585.         # 为了使空白比Windows类限定的更小使用双重结构
  586.         @name_contents = Sprite.new
  587.         @name_contents.x = name_x + 12
  588.         @name_contents.y = name_y + 8
  589.         @name_contents.bitmap = Bitmap.new(name_width, name_height)
  590.         @name_contents.z = @name_win.z + 2
  591.         
  592.         # 设定文字色
  593.         nil_color = Color.new(0,0,0,0)
  594.         if FUKI::NAME_COLOR != nil_color
  595.           @name_contents.bitmap.font.color = FUKI::NAME_COLOR
  596.         else
  597.           @name_contents.bitmap.font.color = normal_color
  598.         end
  599.         @name_contents.bitmap.font.size = FUKI::NAME_FONT_SIZE
  600.         # 调整窗口尺寸
  601.         rect = @name_contents.bitmap.text_size(mes_name)
  602.         @name_win.width = rect.width + 32
  603.         # 描画名字
  604.         @name_contents.bitmap.draw_text(rect, mes_name)
  605.       end
  606.     end

  607.   end
  608.   
  609.   #--------------------------------------------------------------------------
  610.   # ○ 释放呼出对话框和角色名字窗口
  611.   #--------------------------------------------------------------------------
  612.   def del_fukidasi
  613.     if @tale != nil
  614.       @tale.dispose
  615.       @tale = nil
  616.     end
  617.     if @name_win != nil
  618.       @name_win.dispose
  619.       @name_win = nil
  620.       @name_contents.dispose
  621.       @name_contents = nil
  622.     end
  623.     self.opacity = 0
  624.     self.x = 80
  625.     self.width = 480
  626.     self.height = 160
  627.     self.contents.dispose
  628.     self.contents = Bitmap.new(width - 32, height - 32)
  629.     self.pause = true
  630.   end
  631.   
  632.   #--------------------------------------------------------------------------
  633.   # ○ 取得角色
  634.   #     parameter : 参数
  635.   #--------------------------------------------------------------------------
  636.   def get_character(parameter)
  637.     # 参数分歧
  638.     case parameter
  639.     when -1  # 玩家
  640.       return $game_player
  641.     when 0   # 该事件
  642.       events = $game_map.events
  643.       return events == nil ? nil : events[$active_event_id]
  644.     else     # 特定事件
  645.       events = $game_map.events
  646.       return events == nil ? nil : events[parameter]
  647.     end
  648.   end
  649.   
  650.   #--------------------------------------------------------------------------
  651.   # ● 设定窗口位置和不透明度
  652.   #--------------------------------------------------------------------------
  653.   def reset_window
  654.     if $game_temp.in_battle
  655.       self.y = 16
  656.     else
  657.       case $game_system.message_position
  658.       when 0  # 上
  659.         self.y = 16
  660.       when 1  # 中
  661.         self.y = 160
  662.       when 2  # 下
  663.         self.y = 304
  664.       end
  665.     end
  666.     if $game_system.message_frame == 0
  667.       self.opacity = 255
  668.     else
  669.       self.opacity = 0
  670.     end
  671.     self.back_opacity = FUKI::MES_OPACITY
  672.   end
  673.   
  674.   #--------------------------------------------------------------------------
  675.   # ● 刷新画面
  676.   #--------------------------------------------------------------------------
  677.   def update
  678.     super
  679.     # 呼出模式下跟随事件移动
  680.     if @tale != nil
  681.       pos = get_fuki_pos(self.width, self.height)
  682.       self.x = pos[0]
  683.       self.y = pos[1]

  684.       tale_pos = get_tale_pos
  685.       @tale.x = tale_pos[0]
  686.       @tale.y = tale_pos[1]
  687.       
  688.       if @name_win != nil
  689.         name_pos = get_name_pos
  690.         @name_win.x = name_pos[0]
  691.         @name_win.y = name_pos[1]
  692.         case @face_pic_txt
  693.           when 0  # 文字
  694.             @name_contents.x = @name_win.x + 12
  695.             @name_contents.y = @name_win.y + 8
  696.           when 1  # 图片
  697.             @name_contents.x = @name_win.x + 2
  698.             @name_contents.y = @name_win.y + 2
  699.           end
  700.       end
  701.     end
  702.    
  703.     # 渐变的情况下
  704.     if @fade_in
  705.       self.contents_opacity += 24
  706.       if @name_win != nil
  707.         @name_win.opacity += 24
  708.       end
  709.       if @tale != nil
  710.         @tale.opacity += 24
  711.       end
  712.       if @input_number_window != nil
  713.         @input_number_window.contents_opacity += 24
  714.       end
  715.       if self.contents_opacity == 255
  716.         @fade_in = false
  717.       end
  718.       return
  719.     end
  720.     # 显示信息中的情况下
  721.     if @contents_drawing
  722.       refresh_drawtext
  723.       return
  724.     end
  725.     # 输入数值的情况下
  726.     if @input_number_window != nil
  727.       @input_number_window.update
  728.       # 确定
  729.       if Input.trigger?(Input::C)
  730.         $game_system.se_play($data_system.decision_se)
  731.         $game_variables[$game_temp.num_input_variable_id] =
  732.           @input_number_window.number
  733.         $game_map.need_refresh = true
  734.         # 释放输入数值窗口
  735.         @input_number_window.dispose
  736.         @input_number_window = nil
  737.         terminate_message
  738.       end
  739.       return
  740.     end
  741.     # 显示信息结束的情况下
  742.     if @contents_showing_end
  743.       # 不是显示选择项且不是呼出对话模式则显示暂停标志
  744.       if $game_temp.choice_max == 0 and @tale == nil
  745.         self.pause = true
  746.       else
  747.         self.pause = false
  748.       end
  749.       # 取消
  750.       if Input.trigger?(Input::B)
  751.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  752.           $game_system.se_play($data_system.cancel_se)
  753.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  754.           terminate_message
  755.         end
  756.       end
  757.       # 自动关闭
  758.       @auto_close > 0 ? @auto_close-=1 : @auto_close=-1
  759.       if @auto_close==0
  760.         # 文字还没有处理完的时候
  761.           # 选择项
  762.           if $game_temp.choice_max > 0
  763.             $game_system.se_play($data_system.decision_se)
  764.             $game_temp.choice_proc.call(self.index)
  765.           end
  766.           terminate_message
  767.           del_fukidasi
  768.         end
  769.       # 确定
  770.       if Input.trigger?(Input::C) and @auto_close == -1
  771.         if $game_temp.choice_max > 0
  772.           $game_system.se_play($data_system.decision_se)
  773.           $game_temp.choice_proc.call(self.index)
  774.         end
  775.         terminate_message
  776.         # 释放呼出窗口
  777.         del_fukidasi        
  778.       end      
  779.     return
  780.     end
  781.     # 在渐变以外的状态下有等待显示的信息与选择项的场合
  782.     if @fade_out == false and $game_temp.message_text != nil
  783.       @contents_showing = true
  784.       $game_temp.message_window_showing = true
  785.       reset_window
  786.       refresh_create
  787.       if @name_win != nil
  788.         @name_win.opacity = 0
  789.       end
  790.       if @tale != nil
  791.         @tale.opacity = 0
  792.       end
  793.       Graphics.frame_reset
  794.       self.visible = true
  795.       self.contents_opacity = 0
  796.       if @input_number_window != nil
  797.         @input_number_window.contents_opacity = 0
  798.       end
  799.       @fade_in = true
  800.       return
  801.     end
  802.     # 没有可以显示的信息、但是窗口为可见的情况下
  803.     if self.visible
  804.       @fade_out = true
  805.       self.opacity -= 48
  806.       if @name_win != nil
  807.         @name_win.opacity -= 48
  808.       end
  809.       if @tale != nil
  810.         @tale.opacity -= 48
  811.       end
  812.       if self.opacity == 0
  813.         self.visible = false
  814.         @fade_out = false
  815.         $game_temp.message_window_showing = false
  816.         del_fukidasi
  817.       end
  818.       return
  819.     end
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ● 释放
  823.   #--------------------------------------------------------------------------
  824.   def dispose
  825.     terminate_message
  826.     $game_temp.message_window_showing = false
  827.     if @input_number_window != nil
  828.       @input_number_window.dispose
  829.     end
  830.     super
  831.   end
  832.   
  833.   #--------------------------------------------------------------------------
  834.   # ● 信息结束处理
  835.   #--------------------------------------------------------------------------
  836.   def terminate_message
  837.     @auto_close = -1
  838.     self.active = false
  839.     self.pause = false
  840.     self.index = -1
  841.     self.contents.clear
  842.     # 清除显示中标志
  843.     @contents_showing = false
  844.     @contents_showing_end = false
  845.     # 呼叫信息调用
  846.     if $game_temp.message_proc != nil
  847.       $game_temp.message_proc.call
  848.     end
  849.     # 清除文章、选择项、输入数值的相关变量
  850.     $game_temp.message_text = nil
  851.     $game_temp.message_proc = nil
  852.     $game_temp.choice_start = 99
  853.     $game_temp.choice_max = 0
  854.     $game_temp.choice_cancel_type = 0
  855.     $game_temp.choice_proc = nil
  856.     $game_temp.num_input_start = 99
  857.     $game_temp.num_input_variable_id = 0
  858.     $game_temp.num_input_digits_max = 0
  859.     # 释放金钱窗口
  860.     if @gold_window != nil
  861.       @gold_window.dispose
  862.       @gold_window = nil
  863.     end
  864.   end
  865.   
  866.   #--------------------------------------------------------------------------
  867.   # ● 刷新光标矩形
  868.   #--------------------------------------------------------------------------
  869.   def update_cursor_rect
  870.     if @index >= 0
  871.       n = $game_temp.choice_start + @index
  872.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  873.     else
  874.       self.cursor_rect.empty
  875.     end
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ● 取得普通文字色
  879.   #--------------------------------------------------------------------------
  880.   def normal_color
  881.     nil_color = Color.new(0,0,0,0)
  882.     if FUKI::FUKI_COLOR != nil_color
  883.       color = FUKI::FUKI_COLOR
  884.     else
  885.       color = super
  886.     end
  887.     return color
  888.   end
  889. end

  890. #==============================================================================
  891. # ■ Interpreter
  892. #==============================================================================

  893. class Interpreter
  894.   #--------------------------------------------------------------------------
  895.   # ● 设置事件
  896.   #     event_id : 事件 ID
  897.   #--------------------------------------------------------------------------
  898.   alias setup_fuki setup
  899.   def setup(list, event_id)
  900.     setup_fuki(list, event_id)
  901.     # 如果不是战斗中
  902.     if !($game_temp.in_battle)
  903.       # 记录事件 ID
  904.       $active_event_id = event_id
  905.     end
  906.   end
  907. end

  908. #==============================================================================
  909. # ■ Scene_Map
  910. #==============================================================================

  911. class Scene_Map
  912.   #--------------------------------------------------------------------------
  913.   # ● 主处理
  914.   #--------------------------------------------------------------------------
  915.   def main
  916.     # 生成活动块
  917.     @spriteset = Spriteset_Map.new
  918.     # 生成信息窗口
  919.     @message_window = Window_FukiMessage.new
  920.     # 执行过渡
  921.     Graphics.transition
  922.     # 主循环
  923.     loop do
  924.       # 刷新游戏画面
  925.       Graphics.update
  926.       # 刷新输入信息
  927.       Input.update
  928.       # 刷新画面
  929.       update
  930.       # 如果画面切换的话就中断循环
  931.       if $scene != self
  932.         break
  933.       end
  934.     end
  935.     # 准备过渡
  936.     Graphics.freeze
  937.     # 释放活动块
  938.     @spriteset.dispose
  939.     # 释放信息窗口
  940.     @message_window.dispose
  941.     # 标题画面切换中的情况下
  942.     if $scene.is_a?(Scene_Title)
  943.       # 淡入淡出画面
  944.       Graphics.transition
  945.       Graphics.freeze
  946.     end
  947.   end
  948. end

  949. #==============================================================================
  950. # ■ Window_InputNumber
  951. #==============================================================================

  952. class Window_InputNumber < Window_Base
  953.   #--------------------------------------------------------------------------
  954.   # ● 初始化对像
  955.   #     digits_max : 位数
  956.   #--------------------------------------------------------------------------
  957.   def initialize(digits_max)
  958.     @digits_max = digits_max
  959.     @number = 0
  960.     # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
  961.     dummy_bitmap = Bitmap.new(32, 32)
  962.     dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
  963.     @cursor_width = dummy_bitmap.text_size("0").width + 8
  964.     dummy_bitmap.dispose
  965.     super(0, 0, @cursor_width * @digits_max + 32, 64)
  966.     self.contents = Bitmap.new(width - 32, height - 32)
  967.     self.contents.font.size = FUKI::MES_FONT_SIZE
  968.     self.z += 9999
  969.     self.opacity = 0
  970.     @index = 0
  971.     refresh
  972.     update_cursor_rect
  973.   end
  974. end
复制代码

Lv2.观梦者

梦石
0
星屑
375
在线时间
142 小时
注册时间
2008-11-20
帖子
231
2
发表于 2011-8-20 09:32:46 | 只看该作者
看不到脚本,无从下手,最好把工程发上来,好解决,继续关注

点评

脚本已经加上了,第一个问题俺已经自行解决了,求现在这个问题的解答。。TAT  发表于 2011-8-20 09:35
  
【RPGXP视频教学】脚本不是高手的专利 (正在更新...)
http://rpg.blue/thread-238457-1-1.html



回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

3
发表于 2011-8-20 09:38:45 | 只看该作者
本帖最后由 亿万星辰 于 2011-8-20 09:43 编辑

印象里是哪里少了几个return来的…
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
22 小时
注册时间
2011-8-18
帖子
17
4
 楼主| 发表于 2011-8-20 09:46:43 | 只看该作者
:dizzy:
问题我都自己解决了。。。还是谢谢楼上两位!

点评

LZ请认可下帮助你的人,否则版主不留情面的!  发表于 2011-8-20 10:08
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
375
在线时间
142 小时
注册时间
2008-11-20
帖子
231
5
发表于 2011-8-20 09:51:01 | 只看该作者
你的脚本某侠用不了,总报错,
某侠自己看了下,你试试修改第118行
    h = @h * (self.contents.font.size + 10) + 26
改为
    h = @h * (self.contents.font.size + 5) + 26
试试,如果再不行就加某侠QQ:361621602.在线帮你解决!
  
【RPGXP视频教学】脚本不是高手的专利 (正在更新...)
http://rpg.blue/thread-238457-1-1.html



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-27 12:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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