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

Project1

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

[已经解决] 求SAO王者之路的对话框。。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2013-3-30
帖子
7
跳转到指定楼层
1
发表于 2013-9-20 17:02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
站里的搜索对话框,但是打开不了。。求啊。。好像是气泡对话框?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2013-3-30
帖子
7
2
 楼主| 发表于 2013-9-20 17:03:02 | 只看该作者
QAQ求啊。。我找了很久都没找到。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
3
发表于 2013-9-20 19:01:24 | 只看该作者
是Fuki对话框吧,LZ在资源里可以查到
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

4
发表于 2013-9-20 21:23:09 | 只看该作者
  1. #===============================================================

  2. module FUKI

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

  5.   # 是否显示尾部图标  772  y 调整与角色的距离
  6.   TAIL_SHOW = true

  7.   # Skin的设定
  8.   # 使用数据库默认窗口Skin情况下这里使用[""]
  9.   SAY_SKIN_NAME = "say"   # 呼出对话框用Skin
  10.   THINK_SKIN_NAME = "think"
  11.   VOICE_SKIN_NAME = "voiceover"

  12.   # 字体大小
  13.   MES_FONT_SIZE = 20    # 呼出对话框

  14.   # 字体颜色
  15.   #(设定为 Color.new(0, 0, 0, 0) 表示使用普通文字色)
  16.   FUKI_COLOR = Color.new(155, 98, 38, 255) # 呼出对话框

  17.   # 窗口透明度
  18.   # 如修改窗口透明度请同时修改尾部箭头图形内部的透明度
  19.   FUKI_OPACITY = 255    # 呼出对话框
  20.   MES_OPACITY = 255     # 默认信息窗口

  21.   # 窗口表示时是否根据画面大小自动检查窗口出现的位置,
  22.   # 自动改变位置( true / false )
  23.   # 设置成 true 在某些变态情况下可能出现箭头图标颠倒的问题 <- bbschat <= KKME
  24.   POS_FIX = true

  25.   # 在画面最边缘表示时的稍微挪动
  26.   # 使用圆形Skin的角和方框的角重合的情况下为 true
  27.   CORNER_SHIFT = false
  28.   SHIFT_PIXEL = 4   # true 时挪动的象素

  29.   # 呼出对话框的相对位置(纵坐标)
  30.   POP_SHIFT_TOP = 0         # 表示位置为上的时候
  31.   POP_SHIFT_UNDER = 0       # 表示位置为下的时候

  32.   # 信息的表示速度(数字越小速度越快,0为瞬间表示)
  33.   # 游戏中 可随时用数字代入 $mes_speed 来改变消息表示速度。
  34.   MES_SPEED = 2
  35.   # 默认的文字自动消失时间为45帧
  36.   DEFAULT_AUTO_CLOSE_TIME = 45

  37.   FRAME_WIDTH = 5#
  38.   HEAD_WIDTH = 100
  39.   FADE_IN_STEP = 48#48
  40.   FADE_OUT_STEP = 48#
  41. end


  42. #===============================================================
  43. # 初始化两个变量,不要动(by KKME◎66RPG.com)
  44. #===============================================================
  45. $mes_center = -1


  46. #===============================================================
  47. # □ Game_Temp
  48. #===============================================================

  49. class Game_Temp
  50.   attr_accessor  :namebmp              #保存头像图片的Hash表
  51.   alias initialize_fuki initialize
  52.   def initialize
  53.     initialize_fuki
  54.     # 如果不想使用角色名字直接作为头像文件名
  55.     # 可在这里重新设定角色名字与文件名的对应关系
  56.     @namebmp = {}
  57.   end
  58. end

  59. #===============================================================
  60. # □ Window_Message
  61. #===============================================================

  62. class Window_Message < Window_Selectable
  63.   MARGIN_WIDTH = 0

  64.   #-----------------------------------------------------------
  65.   # ● 初始化状态
  66.   #-----------------------------------------------------------
  67.   def initialize
  68.     super(MARGIN_WIDTH, 304, 640 - MARGIN_WIDTH * 2, 160)
  69.     self.contents = Bitmap.new(width - 32, height - 32)
  70.     self.visible = false
  71.     self.z = 9998
  72.     self.y=+32
  73.     @fade_in = false
  74.     @fade_out = false
  75.     @contents_showing = false
  76.     @cursor_width = 0
  77.     @kkme_name = ""
  78.     @head_name = nil
  79.     self.active = false
  80.     self.index = -1
  81.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  82.     @dx = 0
  83.     @dy = 0#0
  84.     @auto_close=-1
  85.     $mes_speed = FUKI::MES_SPEED
  86.     [url=home.php?mod=space&uid=385195]@THINK[/url] = false
  87.     skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
  88.     self.windowskin = RPG::Cache.windowskin(skin)
  89.   end

  90.   #-----------------------------------------------------------
  91.   # ○ 决定窗口尺寸并生成窗口
  92.   #-----------------------------------------------------------
  93.   def refresh_create
  94.     @kkme_name = nil
  95.     @head_name = nil
  96.     @think = true
  97.     begin
  98.       temp = $game_temp.message_text.split("*")
  99.       if temp[1] != nil
  100.         @kkme_name = temp[0]
  101.         
  102.         @kkme_name.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  103.           $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  104.         end
  105.         
  106.         @head_name = @kkme_name.clone
  107.         @head_name.sub!(/([0-9])/,"")
  108.   
  109.         @kkme_name = @kkme_name.split("-")[0] if @kkme_name.size > 0
  110.         
  111.         if @kkme_name == ""
  112.           @head_name = $game_party.actors[0].name + @head_name
  113.         elsif @kkme_name.to_i != 0
  114.           @head_name = $game_party.actors[@kkme_name.to_i].name + @head_name
  115.         end
  116.         
  117.         if @head_name == "无"
  118.           @head_name = nil
  119.         end
  120.         
  121.         if temp[2] != nil
  122.           $game_temp.message_text = temp[2][1, temp[2].size]
  123.         else
  124.           @think = false
  125.           $game_temp.message_text = temp[1][1, temp[1].size]
  126.         end         

  127.         #$game_temp.message_text = $game_temp.message_text[@kkme_name.size + 2, $game_temp.message_text.size]
  128.       end
  129.     rescue
  130.     end
  131.       
  132.     self.contents.clear
  133.     self.contents.font.color = normal_color
  134.     self.contents.font.size = FUKI::MES_FONT_SIZE
  135.       
  136.     update_character
  137.    
  138.     #cob
  139.     if @character == nil      
  140.       skin = FUKI::VOICE_SKIN_NAME
  141.       #self.back_opacity = 180
  142.     elsif @think
  143.       skin = FUKI::THINK_SKIN_NAME != "" ? FUKI::THINK_SKIN_NAME : FUKI::VOICE_SKIN_NAME
  144.       #$game_temp.message_text = "(" + $game_temp.message_text + ")" unless $game_system.message_position == 1
  145.     else
  146.       skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
  147.     end
  148.    
  149.     self.windowskin = RPG::Cache.windowskin(skin)
  150.    
  151.    
  152.     if @character != nil        
  153.       # 生成呼出窗口
  154.       set_fukidasi
  155.       # 生成角色名字窗口
  156.       set_namewindow if @head_name != nil
  157.     else
  158.       reset_window
  159.     end

  160.     # 初始化信息表示使用的变量
  161.     @dx = @dy = 0
  162.     @cursor_width = 0
  163.     @contents_drawing = true
  164.     # 瞬间表示的情况下
  165.     if $mes_speed == 0
  166.       # 循环信息描绘处理
  167.       while $game_temp.message_text != ""
  168.         draw_massage
  169.       end
  170.       draw_opt_text
  171.       @contents_showing_end = true
  172.       @contents_drawing = false
  173.     else
  174.       # 一个一个描绘文字
  175.       refresh_drawtext
  176.     end
  177.   end

  178.   #-----------------------------------------------------------
  179.   # ○ 一个一个描绘文字
  180.   #-----------------------------------------------------------
  181.   def refresh_drawtext
  182.     if $game_temp.message_text != nil
  183.       if @wait > 0
  184.         @wait -= 1
  185.       elsif @wait == 0
  186.         # 描绘处理
  187.         draw_massage
  188.         @wait = $mes_speed
  189.       end
  190.     end
  191.     # 描绘结束
  192.     if $game_temp.message_text == ""
  193.       draw_opt_text
  194.       @contents_showing_end = true
  195.       @contents_drawing = false
  196.     end
  197.   end

  198.   #-----------------------------------------------------------
  199.   # ○ 取得窗口尺寸
  200.   #-----------------------------------------------------------
  201.   def update_window_size
  202.     x = y = 0
  203.     h = w = 0
  204.     @cursor_width = 0
  205.     # 有选择项的话,处理字的缩进
  206.     if $game_temp.choice_start == 0
  207.       x = 16
  208.     end
  209.     # 有等待显示的文字的情况下
  210.     if $game_temp.message_text != nil
  211.       text = $game_temp.message_text.clone

  212.       # 限制文字处理
  213.       begin
  214.         last_text = text.clone
  215.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  216.       end until text == last_text
  217.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  218.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  219.       end
  220.       # 为了方便、将 "\\\\" 变换为 "\000"
  221.       text.gsub!(/\\\\/) { "\000" }
  222.       # "\\C" 变为 "\001" 、"\\G" 变为 "\002"
  223.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001" }
  224.       text.gsub!(/\\[Gg]/) { "\002" }
  225.       text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\003[#{$1}]" }
  226.       text.slice!(/\\[Aa]\[(\w+)\]/) { "" }
  227.       # c 获取 1 个字 (如果不能取得文字就循环)
  228.       while ((c = text.slice!(/./m)) != nil)
  229.         # \\ 的情况下
  230.         if c == "\000"
  231.           # 还原为本来的文字
  232.           c = "\\"
  233.         end
  234.         # \C[n] 或者 \G 的情况下
  235.         if c == "\001" or c == "\002"
  236.           # 下面的文字
  237.           next
  238.         end
  239.         # 另起一行文字的情况下
  240.         if c == "\n"
  241.           # y 累加 1
  242.           y += 1
  243.           # 取得纵横尺寸
  244.           h = y
  245.           w = x > w ? x : w
  246.           if y >= $game_temp.choice_start
  247.             w = x + 8 > w ? x + 8 : w
  248.           end
  249.           x = 0
  250.           # 移动到选择项的下一行
  251.           if y >= $game_temp.choice_start
  252.             x = 8
  253.           end
  254.           # 下面的文字
  255.           next
  256.         end
  257.         # x 为要描绘文字的宽度加法运算
  258.         x += self.contents.text_size(c).width
  259.       end
  260.     end
  261.     # 输入数值的情况
  262.     if $game_temp.num_input_variable_id > 0
  263.       digits_max = $game_temp.num_input_digits_max
  264.       h += 1
  265.       x = digits_max * self.contents.font.size + 16
  266.       w = x > w ? x : w
  267.     end

  268.     w += 40
  269.     h = h * (self.contents.font.size + 10) + 26

  270.     #cob
  271.     if @head_name != nil
  272.       w += FUKI::HEAD_WIDTH + 8
  273.       min_h = FUKI::HEAD_WIDTH + 8 + FUKI::FRAME_WIDTH * 2
  274.       h = min_h if h < min_h
  275.     end
  276.    
  277.     #cob
  278.     if $game_system.message_frame == 1
  279.       h += 16
  280.     end

  281.     self.width = w
  282.     self.height = h
  283.     #self.y=+32
  284.   end

  285.   #-----------------------------------------------------------
  286.   # ○ 描绘信息处理
  287.   #-----------------------------------------------------------
  288.   def draw_massage
  289.     # 有等待显示的文字的情况下
  290.     if $game_temp.message_text != nil
  291.       text = $game_temp.message_text

  292.       #cob
  293.       if @head_name != nil
  294.         start_x = FUKI::HEAD_WIDTH + 8
  295.       elsif @tail != nil
  296.         start_x = 4
  297.       else
  298.         #start_x = 4
  299.         start_x = @text_x + 4 - MARGIN_WIDTH
  300.       end

  301.       # 限制文字处理
  302.       begin
  303.         last_text = text.clone
  304.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  305.       end until text == last_text
  306.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  307.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  308.       end
  309.       # 为了方便、将 "\\\\" 变换为 "\000"
  310.       text.gsub!(/\\\\/) { "\000" }
  311.       # "\\C" 变为 "\001"、"\\G" 变为 "\002"
  312.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  313.       text.gsub!(/\\[Gg]/) { "\002" }
  314.       text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\003[#{$1}]" }
  315.       if text.slice!(/\\[Aa]\[(\w+)\]/)!=nil
  316.         @auto_close=$1.to_i
  317.       else
  318.         if text.slice!(/\\[Aa]/)!=nil
  319.           @auto_close = FUKI::DEFAULT_AUTO_CLOSE_TIME
  320.         end
  321.       end
  322.       # c 获取 1 个字
  323.       if ((c = text.slice!(/./m)) != nil)
  324.         # 选择项的情况
  325.         if @dy >= $game_temp.choice_start
  326.           # 处理字的缩进
  327.           @dx = 8
  328.           # 描绘文字
  329.           self.contents.draw_text(start_x + @dx, 32 * @dy, 40, 32, c)#32
  330.           # x 为要描绘文字宽度的加法运算
  331.           @dx += self.contents.text_size(c).width
  332.           # 循环
  333.           while ((c = text.slice!(/./m)) != "\n")
  334.             # 描绘文字
  335.             self.contents.draw_text(start_x + @dx, 32 * @dy, 40, 32, c)
  336.             # x 为要描绘文字宽度的加法运算
  337.             @dx += self.contents.text_size(c).width
  338.           end
  339.           if c == "\n"
  340.             # 更新光标宽度
  341.             @cursor_width = [@cursor_width, @dx].max
  342.             # dy 累加 1
  343.             @dy += 1
  344.             @dx = 0
  345.           end
  346.           return
  347.         end
  348.         # \\ 的情况下
  349.         if c == "\000"
  350.           # 还原为本来的文字
  351.           c = "\\"
  352.         end

  353.         #\C[n] 的情况下
  354.         if c == "\001"
  355.           # 更改文字色
  356.           text.sub!(/\[([0-9]+)\]/, "")
  357.           color = $1.to_i
  358.           if color >= 0 and color <= 7
  359.             self.contents.font.color = text_color(color)
  360.           end
  361.           return
  362.         end

  363.         # \G 的情况下
  364.         if c == "\002"
  365.           # 生成金钱窗口
  366.           if @gold_window == nil
  367.             @gold_window = Window_Gold.new
  368.             @gold_window.x = 560 - @gold_window.width
  369.             if $game_temp.in_battle
  370.               @gold_window.y = 192
  371.             else
  372.               @gold_window.y = self.y >= 128 ? 32 : 384
  373.             end
  374.             @gold_window.opacity = self.opacity
  375.             @gold_window.back_opacity = self.back_opacity
  376.           end
  377.           return
  378.         end

  379.         if c == "\003"
  380.           text.sub!(/\[([0-9]+)\]/, "")
  381.           self.contents.font.color.alpha = [[0, $1.to_i].max, 255].min
  382.           return
  383.         end

  384.         # 另起一行文字的情况下
  385.         if c == "\n"
  386.           # dy 累加 1
  387.           @dy += 1
  388.           @dx = 0
  389.           return
  390.         end

  391.         # 描绘文字
  392.         self.contents.font.size = FUKI::MES_FONT_SIZE
  393.         font_size = self.contents.font.size
  394.         self.contents.draw_text(start_x+@dx, (font_size+10)*@dy, font_size, font_size, c)
  395.         # dx 为要描绘文字的宽度加法运算
  396.         @dx += self.contents.text_size(c).width
  397.       end
  398.     end
  399.   end

  400.   #-----------------------------------------------------------
  401.   # ○ 选择项和输入数值的情况下
  402.   #-----------------------------------------------------------
  403.   def draw_opt_text
  404.     # 选择项的情况下
  405.     if $game_temp.choice_max > 0
  406.       @item_max = $game_temp.choice_max
  407.       self.active = true
  408.       self.index = 0
  409.     end
  410.     # 输入数值的情况下
  411.     if $game_temp.num_input_variable_id > 0
  412.       digits_max = $game_temp.num_input_digits_max
  413.       number = $game_variables[$game_temp.num_input_variable_id]
  414.       @input_number_window = Window_InputNumber.new(digits_max)
  415.       @input_number_window.number = number
  416.       @input_number_window.x = self.x + 8
  417.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  418.     end
  419.   end

  420.   #-----------------------------------------------------------
  421.   # ○ 设置呼出对话框
  422.   #-----------------------------------------------------------
  423.   def set_fukidasi


  424.       # 不显示暂停标志
  425.       self.pause = false

  426.       update_window_size
  427.       update_window_pos
  428.       
  429.       self.opacity = 0

  430.       self.contents.dispose
  431.       self.contents = Bitmap.new(width - 32, height - 32)#32
  432.       self.back_opacity = FUKI::FUKI_OPACITY
  433.       self.contents.clear
  434.       self.contents.font.color = normal_color
  435.       self.contents.font.size = FUKI::MES_FONT_SIZE
  436.       
  437.       # 描绘尾部图标
  438.       if $game_system.message_frame == 0 and FUKI::TAIL_SHOW == true and
  439.           @message_position != 1
  440.         @tail = Sprite.new        
  441.         @tail.z = self.z + 1
  442.         @tail.opacity = 0
  443.         update_tail_pos
  444.         
  445.     #cob
  446.     if @think
  447.       skin = FUKI::THINK_SKIN_NAME != "" ? FUKI::THINK_SKIN_NAME : FUKI::VOICE_SKIN_NAME
  448.     else
  449.       skin = FUKI::SAY_SKIN_NAME != "" ? FUKI::SAY_SKIN_NAME : FUKI::VOICE_SKIN_NAME
  450.     end        
  451.         
  452.         case @message_position
  453.         when 0  # 上
  454.           if(@tail.x < self.x + self.width)#/ 2
  455.             @tail.bitmap = RPG::Cache.windowskin(skin + "-upper_right")
  456.           else
  457.             @tail.bitmap = RPG::Cache.windowskin(skin + "-upper_left")
  458.           end
  459.         when 2  # 下
  460.           if(@tail.x + 40 > self.x + self.width  )
  461.             @tail.bitmap = RPG::Cache.windowskin(skin + "-lower_left")
  462.           else
  463.             @tail.bitmap = RPG::Cache.windowskin(skin + "-lower_right")
  464.           end
  465.         end
  466.       end
  467.   end
  468.   #-----------------------------------------------------------
  469.   # ○ 新功能:根据输入文章计算呼出对话框的位置
  470.   #-----------------------------------------------------------
  471.   def update_character
  472.     @character = get_character_by_name
  473.   end
  474.   
  475.   BATTLER_NAME = {   
  476.    
  477.   }

  478.   def get_character_by_name
  479.     return nil if @kkme_name == nil
  480.    
  481.     if $game_temp.in_battle
  482.       return $game_party.actors[0] if @kkme_name == ""
  483.       return $game_party.actors[@kkme_name.to_i] if @kkme_name.to_i != 0
  484.       
  485.       name = BATTLER_NAME[@kkme_name]
  486.       name = @kkme_name unless name
  487.       for enemy in $game_troop.enemies
  488.         return enemy if enemy.name == name
  489.       end
  490.       
  491.       return nil
  492.     end
  493.    
  494.     return $game_player if @kkme_name == ""
  495.     return $game_party.characters[@kkme_name.to_i - 1] if @kkme_name.to_i != 0

  496.     for event in $game_map.events.values
  497.       return event if event.name == @kkme_name and event.character_name != ""
  498.     end
  499.       
  500.     for actor in $game_party.actors
  501.       return $game_player if actor.name == @kkme_name
  502.     end
  503.       
  504.     return nil
  505.   end
  506.   
  507.   def tail_offset_x
  508.     return 18 if @think
  509.     return 16
  510.   end
  511.   
  512.   def tail_offset_y
  513.     return 18 if @think
  514.     return 2
  515.   end

  516.   #-----------------------------------------------------------
  517.   # ○ 计算呼出对话框的位置
  518.   #-----------------------------------------------------------
  519.   def update_window_pos
  520.     # 记录文章显示位置
  521.     @message_position = $game_system.message_position
  522.     if @message_position == 1
  523.       self.x = (640 - self.width) / 2
  524.       self.y = (480 - self.height) / 2
  525.       return
  526.     end
  527.    
  528.     update_character

  529.     if @character == nil
  530.       # 角色不存在的情况下使用默认信息框
  531.       del_fukidasi
  532.       reset_window
  533.       return
  534.     end
  535.    
  536.     if $game_temp.in_battle
  537.       @message_position = 0
  538.     elsif $mes_center != nil
  539.       center_char = get_character($mes_center)
  540.       if center_char != nil
  541.         if @character.real_y > center_char.real_y
  542.           @message_position = 2
  543.         else
  544.           @message_position = 0
  545.         end
  546.       end
  547.     end

  548.     case @message_position
  549.     when 0  # 上
  550.       y = @character.screen_y - self.height - @character.sprite_height + FUKI::POP_SHIFT_TOP
  551.       y -= tail_offset_y
  552.       if FUKI::POS_FIX and y < 4
  553.         if $game_temp.in_battle
  554.           y = 4    #4      
  555.         else         
  556.           @message_position = 2
  557.           y = @character.screen_y + FUKI::POP_SHIFT_UNDER
  558.           y += tail_offset_y
  559.         end
  560.       end
  561.     when 2  # 下
  562.       y = @character.screen_y + FUKI::POP_SHIFT_UNDER
  563.       y += tail_offset_y
  564.       if FUKI::POS_FIX and y + self.height > 480 - 4
  565.         @message_position = 0
  566.         y = @character.screen_y - self.height - @character.sprite_height + FUKI::POP_SHIFT_TOP
  567.         y -= tail_offset_y
  568.       end
  569.     end

  570.     x = @character.screen_x - self.width / 2
  571.     case @message_position
  572.     when 0  # 上
  573.       x += tail_offset_x
  574.     when 2  # 下
  575.       x -= tail_offset_x
  576.     end

  577.     if x + self.width > 640 - 4
  578.       x = 640 - 4 - self.width
  579.     elsif x < 4
  580.       x = 4
  581.     end
  582.    
  583.     if y + self.height > 480 - 4
  584.       y = 480 - 4 - self.height
  585.     elsif y < 4
  586.       y = 4
  587.     end

  588.     self.x = x
  589.     self.y = y
  590.   end

  591.   #-----------------------------------------------------------
  592.   # ○ 计算尾部图标的位置
  593.   #-----------------------------------------------------------
  594.   def update_tail_pos
  595.     x = @character.screen_x - tail_offset_x
  596.    
  597.     case @message_position
  598.     when 0  # 上
  599.       # 画面边缘的话则移动位置
  600.       if FUKI::CORNER_SHIFT
  601.         if x == 0
  602.           x = FUKI::SHIFT_PIXEL
  603.         elsif x == 640 - 32
  604.           x = 640 - 32 - FUKI::SHIFT_PIXEL
  605.         end
  606.       end
  607.       y = self.y + self.height - 16
  608.       y += 16 if @think#16
  609.     when 2  # 下
  610.       # 画面边缘的话则移动位置
  611.       if FUKI::CORNER_SHIFT
  612.         if x == 0
  613.           x = FUKI::SHIFT_PIXEL
  614.         elsif @tail.x == 640 - 32
  615.           x = 640 - 32 - FUKI::SHIFT_PIXEL
  616.         end
  617.       end
  618.       y = self.y - 16
  619.       y -= 16 if @think
  620.     end   
  621.    
  622.     @tail.x = x
  623.     @tail.y = y
  624.   end

  625.   #-----------------------------------------------------------
  626.   # ○ 计算名字窗口的位置
  627.   #-----------------------------------------------------------
  628.   def update_name_pos
  629.     @head.x = self.x + FUKI::FRAME_WIDTH + 4
  630.     @head.y = self.y + (self.height - FUKI::HEAD_WIDTH)/2
  631.   end

  632.   #-----------------------------------------------------------
  633.   # ○ 设置角色名字窗口
  634.   #-----------------------------------------------------------
  635.   def set_namewindow      
  636.     #判断名称是否有对应的图片"Graphics/heads/" +
  637.     if $game_temp.namebmp[@head_name] == nil then
  638.       sFile = FUKI::HEAD_PIC_DIR + @head_name + ".png"
  639.     else
  640.       sFile = FUKI::HEAD_PIC_DIR + $game_temp.namebmp[@head_name] + ".png"
  641.     end

  642.     # 生成头像
  643.     [url=home.php?mod=space&uid=346374]@head[/url] = Sprite.new
  644.     @head.bitmap = Bitmap.new(sFile)
  645.     @head.z = self.z + 1
  646.     @head.opacity = 0
  647.     update_name_pos
  648.   end

  649.   #-----------------------------------------------------------
  650.   # ○ 释放呼出对话框和角色名字窗口
  651.   #-----------------------------------------------------------
  652.   def del_fukidasi
  653.     if @tail != nil
  654.       @tail.dispose
  655.       @tail = nil
  656.     end
  657.     if @head != nil
  658.       @head.dispose
  659.       @head = nil
  660.     end
  661.     self.opacity = 0
  662.     self.x = MARGIN_WIDTH
  663.     self.width = 640 - MARGIN_WIDTH * 2
  664.     self.height = 160
  665.     self.contents.dispose
  666.     self.contents = Bitmap.new(width - 32, height - 32)
  667.     self.pause = true
  668.   end

  669.   #-----------------------------------------------------------
  670.   # ○ 取得角色
  671.   #     parameter : 参数
  672.   #-----------------------------------------------------------
  673.   def get_character(parameter)
  674.     # 参数分歧
  675.     case parameter
  676.     when -1  # 玩家
  677.       return $game_player
  678.     when 0   # 该事件
  679.       events = $game_map.events
  680.       return events == nil ? nil : events[$active_event_id]
  681.     else     # 特定事件
  682.       if parameter > 0
  683.         events = $game_map.events
  684.         return events == nil ? nil : events[parameter]
  685.       end
  686.       events = $game_party.characters
  687.       return events == nil ? nil : events[-parameter - 2]
  688.     end
  689.   end

  690.   #-----------------------------------------------------------
  691.   # ● 设定窗口位置和不透明度
  692.   #-----------------------------------------------------------
  693.   def reset_window
  694.     update_window_size
  695.     @text_x = 320 - width / 2
  696.     self.width = 640 - MARGIN_WIDTH * 2
  697.     self.contents.dispose   
  698.     self.contents = Bitmap.new(width - 32, height - 32)
  699.     self.x = 320 - width / 2
  700.    
  701.     if $game_temp.in_battle
  702.       self.y = 32#16
  703.     else
  704.       case $game_system.message_position
  705.       when 0  # 上
  706.         self.y = 16
  707.       when 1  # 中
  708.         self.y = 240 - self.height / 2 #160
  709.       when 2  # 下
  710.         #self.y = 304
  711.         self.y = 480 - 16 - height
  712.       end
  713.     end
  714.     if $game_system.message_frame == 0
  715.       self.opacity = 255
  716.     else
  717.       self.opacity = 0
  718.     end
  719.     self.back_opacity = FUKI::MES_OPACITY
  720.     @think = false
  721.    
  722.   end

  723.   #-----------------------------------------------------------
  724.   # ● 刷新画面
  725.   #-----------------------------------------------------------
  726.   def update
  727.     super
  728.    
  729.     # 呼出模式下跟随事件移动
  730.     if @tail != nil
  731.       update_window_pos
  732.       update_name_pos if @head != nil
  733.       update_tail_pos
  734.     end

  735.     # 渐变的情况下
  736.     if @fade_in   
  737.       self.opacity += FUKI::FADE_IN_STEP if $game_system.message_frame == 0
  738.       self.contents_opacity += FUKI::FADE_IN_STEP
  739.       @head.opacity += FUKI::FADE_IN_STEP if @head != nil
  740.       @tail.opacity += FUKI::FADE_IN_STEP if @tail != nil
  741.       @input_number_window.contents_opacity += FUKI::FADE_IN_STEP if @input_number_window != nil
  742.       @fade_in = false if self.contents_opacity == 255
  743.       return
  744.     end

  745.     # 显示信息中的情况下
  746.     if @contents_drawing
  747.       refresh_drawtext
  748.       return
  749.     end

  750.     # 输入数值的情况下
  751.     if @input_number_window != nil
  752.       @input_number_window.update
  753.       # 确定
  754.       if Input.trigger?(Input::C)
  755.         $game_system.se_play($data_system.decision_se)
  756.         $game_variables[$game_temp.num_input_variable_id] =
  757.           @input_number_window.number
  758.         $game_map.need_refresh = true
  759.         # 释放输入数值窗口
  760.         @input_number_window.dispose
  761.         @input_number_window = nil
  762.         terminate_message
  763.       end
  764.       return
  765.     end

  766.     # 显示信息结束的情况下
  767.     if @contents_showing_end
  768.       # 不是显示选择项且不是呼出对话模式则显示暂停标志
  769.       if $game_temp.choice_max == 0 and @tail == nil
  770.         self.pause = true
  771.       else
  772.         self.pause = false
  773.       end
  774.       
  775.       #cob
  776.       if false and $game_temp.choice_max == 0 and @auto_close == -1
  777.         if Input.press?(Input::B) or
  778.             Input.press?(Input::UP) or
  779.             Input.press?(Input::DOWN) or
  780.             Input.press?(Input::LEFT) or
  781.             Input.press?(Input::RIGHT)
  782.           terminate_message
  783.           del_fukidasi
  784.           $game_temp.terminate_message = true
  785.         end
  786.       end
  787.       
  788.       # 取消
  789.       #if Input.trigger?(Input::B)
  790.         #if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  791.           #$game_system.se_play($data_system.cancel_se)
  792.           #$game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  793.           #terminate_message
  794.       #end
  795.       #end
  796.       # 自动关闭
  797.       #@auto_close > 0 ? @auto_close-=1 : @auto_close=-1
  798.       #if @auto_close==0
  799.         # 文字还没有处理完的时候
  800.         # 选择项
  801.         #if $game_temp.choice_max > 0
  802.           #$game_system.se_play($data_system.decision_se)
  803.           #$game_temp.choice_proc.call(self.index)
  804.         #end
  805.         #terminate_message
  806.         #del_fukidasi
  807.       #end
  808.       # 确定
  809.       if Input.trigger?(Input::C) and @auto_close == -1
  810.         if $game_temp.choice_max > 0
  811.           $game_system.se_play($data_system.decision_se)
  812.           $game_temp.choice_proc.call(self.index)
  813.         end
  814.         terminate_message
  815.         # 释放呼出窗口
  816.         del_fukidasi
  817.       end
  818.       return
  819.     end

  820.     # 在渐变以外的状态下有等待显示的信息与选择项的场合
  821.     if @fade_out == false and $game_temp.message_text != nil
  822.       @contents_showing = true
  823.       $game_temp.message_window_showing = true
  824.       reset_window
  825.       refresh_create
  826.       if @head != nil
  827.         @head.opacity = 0
  828.       end
  829.       if @tail != nil
  830.         @tail.opacity = 0
  831.       end
  832.       Graphics.frame_reset
  833.       self.visible = true
  834.       self.contents_opacity = 0
  835.       if @input_number_window != nil
  836.         @input_number_window.contents_opacity = 0
  837.       end
  838.       @fade_in = true
  839.       return
  840.     end

  841.     # 没有可以显示的信息、但是窗口为可见的情况下
  842.     if self.visible
  843.       @fade_out = true
  844.       
  845.       self.contents_opacity -= FUKI::FADE_OUT_STEP
  846.       @head.opacity -= FUKI::FADE_OUT_STEP if @head != nil
  847.       @tail.opacity -= FUKI::FADE_OUT_STEP if @tail != nil
  848.       @input_number_window.contents_opacity -= FUKI::FADE_OUT_STEP if @input_number_window != nil

  849.       if self.opacity == 0
  850.         self.visible = false
  851.         @fade_out = false
  852.         $game_temp.message_window_showing = false
  853.         del_fukidasi
  854.       end
  855.       return
  856.     end
  857.   end

  858.   #-----------------------------------------------------------
  859.   # ● 释放
  860.   #-----------------------------------------------------------
  861.   def dispose
  862.     terminate_message
  863.     $game_temp.message_window_showing = false
  864.     if @input_number_window != nil
  865.       @input_number_window.dispose
  866.     end
  867.     del_fukidasi   
  868.     super
  869.   end

  870.   #-----------------------------------------------------------
  871.   # ● 信息结束处理
  872.   #-----------------------------------------------------------
  873.   def terminate_message
  874.     @auto_close = -1
  875.     self.active = false
  876.     self.pause = false
  877.     self.index = -1
  878.     self.contents.clear
  879.     # 清除显示中标志
  880.     @contents_showing = false
  881.     @contents_showing_end = false
  882.     unless @kkme_name == "" or @kkme_name == nil
  883.       @kkme_name = ""
  884.     end
  885.     # 呼叫信息调用
  886.     if $game_temp.message_proc != nil
  887.       $game_temp.message_proc.call
  888.     end
  889.     # 清除文章、选择项、输入数值的相关变量
  890.     $game_temp.message_text = nil
  891.     $game_temp.message_proc = nil
  892.     $game_temp.choice_start = 99
  893.     $game_temp.choice_max = 0
  894.     $game_temp.choice_cancel_type = 0
  895.     $game_temp.choice_proc = nil
  896.     $game_temp.num_input_start = 99
  897.     $game_temp.num_input_variable_id = 0
  898.     $game_temp.num_input_digits_max = 0
  899.     # 释放金钱窗口
  900.     if @gold_window != nil
  901.       @gold_window.dispose
  902.       @gold_window = nil
  903.     end
  904.   end

  905.   #-----------------------------------------------------------
  906.   # ● 刷新光标矩形
  907.   #-----------------------------------------------------------
  908.   def update_cursor_rect
  909.     if [url=home.php?mod=space&uid=370741]@Index[/url] >= 0
  910.       n = $game_temp.choice_start + @index
  911.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  912.     else
  913.       self.cursor_rect.empty
  914.     end
  915.   end
  916.   #-----------------------------------------------------------
  917.   # ● 取得普通文字色
  918.   #-----------------------------------------------------------
  919.   def normal_color
  920.     return FUKI::FUKI_COLOR #if FUKI::FUKI_COLOR != nil
  921.   end
  922. end


  923. #===============================================================
  924. # ■ Window_InputNumber
  925. #===============================================================

  926. class Window_InputNumber < Window_Base
  927.   #-----------------------------------------------------------
  928.   # ● 初始化对像
  929.   #     digits_max : 位数
  930.   #-----------------------------------------------------------
  931.   def initialize(digits_max)
  932.     @digits_max = digits_max
  933.     [url=home.php?mod=space&uid=27178]@Number[/url] = 0
  934.     # 从数字的幅度计算(假定与 0~9 等幅)光标的幅度
  935.     dummy_bitmap = Bitmap.new(32, 32)
  936.     dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
  937.     @cursor_width = dummy_bitmap.text_size("0").width + 8
  938.     dummy_bitmap.dispose
  939.     super(0, 0, @cursor_width * @digits_max + 32, 64)
  940.     self.contents = Bitmap.new(width - 32, height - 32)
  941.     self.contents.font.size = FUKI::MES_FONT_SIZE
  942.     self.z += 9999
  943.     self.opacity = 0
  944.     @index = 0
  945.     refresh
  946.     update_cursor_rect
  947.   end
  948. end

  949. #============================================================
  950. # Game_Map,把events变量公开
  951. #============================================================
  952. class Game_Map
  953.   attr_reader   :events
  954. end

  955. #============================================================
  956. # 便于返回姓名
  957. #============================================================
  958. class Game_Event < Game_Character
  959.   def name
  960.     return @event.name
  961.   end
  962.   def name=(na)
  963.     @event.name = na
  964.   end
  965. end

  966. #============================================================
  967. # 增加变量$active_event_id,用于在“本事件”显示对话
  968. #============================================================
  969. class Interpreter
  970.   #-----------------------------------------------------------
  971.   # ● 设置事件
  972.   #     event_id : 事件 ID
  973.   #-----------------------------------------------------------
  974.   alias setup_fuki setup
  975.   def setup(list, event_id)
  976.     setup_fuki(list, event_id)
  977.     # 如果不是战斗中
  978.     if !($game_temp.in_battle)
  979.       # 记录事件 ID
  980.       $active_event_id = event_id
  981.     end
  982.   end
  983. end

  984. #cob
  985. class Game_Character
  986.   SPRITE_HEIGHTS = {
  987.     #"097-Monster11"=>300,
  988.   }
  989.   def sprite_height
  990.     height = SPRITE_HEIGHTS[@character_name]
  991.     return height / 4 if height
  992.     bitmap = RPG::Cache.character(@character_name, @character_hue)
  993.     return bitmap.height / 4
  994.   end
  995. end

  996. class Game_Battler
  997.   def sprite_height
  998.     bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  999.     return bitmap.height
  1000.   end
  1001. end
复制代码
气泡型对话框,不过还是建议用FUKI对话框。
这个脚本设置对话方面很困难的。
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

5
发表于 2013-9-20 21:23:23 | 只看该作者
Fuki对话框加强(打字输入显示)

  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2013-3-30
帖子
7
6
 楼主| 发表于 2013-9-20 22:29:53 | 只看该作者
美丽晨露 发表于 2013-9-20 21:23
气泡型对话框,不过还是建议用FUKI对话框。
这个脚本设置对话方面很困难的。  ...

内个。。谢谢了。。有范例工程吗。。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

7
发表于 2013-9-20 22:37:56 | 只看该作者
气泡型对话框.zip (263.79 KB, 下载次数: 49)
工程范例一枚,自制,请查收。

评分

参与人数 2星屑 +240 收起 理由
明特·布兰马修 + 150 认可答案
myownroc + 90 认可答案

查看全部评分

大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2013-3-30
帖子
7
8
 楼主| 发表于 2013-9-21 08:10:51 | 只看该作者
美丽晨露 发表于 2013-9-20 22:37
工程范例一枚,自制,请查收。

太谢谢了,终于找到了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-28 09:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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