Project1

标题: 为什么对话框中的文字不能显示到框的长度?? [打印本页]

作者: jolliers    时间: 2010-8-8 15:22
标题: 为什么对话框中的文字不能显示到框的长度??
直接上图,怎样才能让文字和框的长度一样?
因为这样看起来很奇怪……

作者: jolliers    时间: 2010-8-8 15:23
就是说右边空出了一截,看上去非常奇怪。
求解……
作者: 幻の飞鱼    时间: 2010-8-8 15:25
不知道你用的是什么版本的对话系统=。=
作者: 后知后觉    时间: 2010-8-8 15:32
貌似字体 size 被缩小了很多很多的样子...
作者: BBBBB6    时间: 2010-8-8 16:16
换行符?
作者: bbaugle    时间: 2010-8-8 17:17
修改Window_Message的初始化方法的super(X,X,X,X)就可以了,这是显示文章的窗口
其中super(x,y,w,h) x=画面x坐标,y=画面y坐标,w=窗口的宽,h=窗口的高。
作者: dantesy    时间: 2010-8-8 19:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: jolliers    时间: 2010-8-8 22:00
这个是我使用的脚本,就是可以自己换用其他图片做图片的。
  1. #==============================================================================
  2. # ■ Window_Message
  3. #------------------------------------------------------------------------------
  4. #  顯示對話的訊息視窗。
  5. #==============================================================================

  6. class Window_Message < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化狀態
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     #▼▼▼▼▼調整視窗大小與座標 長寬都要比對話框圖片大32
  12.     super(20, 500,640, 200)
  13.     #▲▲▲▲▲
  14.     self.contents = Bitmap.new(width, height)
  15.     self.opacity = 0
  16.     self.visible = false
  17.     self.visible = false
  18.     self.z = 9998
  19.     @fade_in = false
  20.     @fade_out = false
  21.     @contents_showing = false
  22.     @cursor_width = 0
  23.     self.active = false
  24.     self.index = -1
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 釋放
  28.   #--------------------------------------------------------------------------
  29.   def dispose
  30.     terminate_message
  31.     $game_temp.message_window_showing = false
  32.     if @input_number_window != nil
  33.       @input_number_window.dispose
  34.     end
  35.     super
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 處理訊息結束
  39.   #--------------------------------------------------------------------------
  40.   def terminate_message
  41.     self.active = false
  42.     self.pause = false
  43.     self.index = -1
  44.     self.contents.clear
  45.     # 清除顯示中標誌
  46.     @contents_showing = false
  47.     # 呼叫訊息
  48.     if $game_temp.message_proc != nil
  49.       $game_temp.message_proc.call
  50.     end
  51.     # 清除對話、選擇項、輸入數值的相關變數
  52.     $game_temp.message_text = nil
  53.     $game_temp.message_proc = nil
  54.     $game_temp.choice_start = 99
  55.     $game_temp.choice_max = 0
  56.     $game_temp.choice_cancel_type = 0
  57.     $game_temp.choice_proc = nil
  58.     $game_temp.num_input_start = 99
  59.     $game_temp.num_input_variable_id = 0
  60.     $game_temp.num_input_digits_max = 0
  61.     # 開放金錢視窗
  62.     if @gold_window != nil
  63.       @gold_window.dispose
  64.       @gold_window = nil
  65.     end
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 更新
  69.   #--------------------------------------------------------------------------
  70.   def refresh
  71.     self.contents.clear
  72.     self.contents.font.color = normal_color
  73.     self.contents.font.size = 15
  74.     #▼▼▼▼▼定義對話框的圖片,"对话框1"是圖片名稱,可變更
  75.   if $game_system.message_frame == 0
  76.       self.contents.blt(0, 0, RPG::Cache.picture("对话框1"), Rect.new(0, 0, 600,200))
  77.     else
  78.       self.opacity = 0
  79.     end
  80.     #▲▲▲▲▲
  81.     x = y = 0
  82.     @cursor_width = 0
  83.     # 到選擇項的下一行文字
  84.     if $game_temp.choice_start == 0
  85.       x = 8
  86.     end
  87.     # 有等待顯示文字的情況下
  88.     if $game_temp.message_text != nil
  89.       text = $game_temp.message_text
  90.       # 限制文字處理
  91.       begin
  92.         last_text = text.clone
  93.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  94.       end until text == last_text
  95.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  96.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  97.       end
  98.       # 為了方便、將 "\\\\" 變換為 "\000"
  99.       text.gsub!(/\\\\/) { "\000" }
  100.       # "\\C" 變為 "\001" に、"\\G" 變為 "\002"
  101.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  102.       text.gsub!(/\\[Gg]/) { "\002" }
  103.       # c 獲取 1 個文字 (如果不能取得文字就循環)
  104.       while ((c = text.slice!(/./m)) != nil)
  105.         # \\ 的情況下
  106.         if c == "\000"
  107.           # 還原為原來的文字
  108.           c = "\\"
  109.         end
  110.         # \C[n] 的情況下
  111.         if c == "\001"
  112.           # 變更文字色彩
  113.           text.sub!(/\[([0-9]+)\]/, "")
  114.           color = $1.to_i
  115.           if color >= 0 and color <= 7
  116.             self.contents.font.color = text_color(color)
  117.           end
  118.           # 下面的文字
  119.           next
  120.         end
  121.         # \G 的情況下
  122.         if c == "\002"
  123.           # 產生金錢視窗
  124.           if @gold_window == nil
  125.             @gold_window = Window_Gold.new
  126.             @gold_window.x = 560 - @gold_window.width
  127.             if $game_temp.in_battle
  128.               @gold_window.y = 192
  129.             else
  130.               @gold_window.y = self.y >= 128 ? 32 : 384
  131.             end
  132.             @gold_window.opacity = self.opacity
  133.             @gold_window.back_opacity = self.back_opacity
  134.           end
  135.           # 下面的文字
  136.           next
  137.         end
  138.         # 另外增加一行文字的情況下
  139.         if c == "\n"
  140.           # 更新選擇項及游標的高
  141.           if y >= $game_temp.choice_start
  142.             @cursor_width = [@cursor_width, x].max
  143.           end
  144.           # y 加 1
  145.           y += 1
  146.           x = 0
  147.           # 移動到選擇項的下一行
  148.           if y >= $game_temp.choice_start
  149.             x = 8
  150.           end
  151.           # 下面的文字
  152.           next
  153.         end
  154.         # 描繪文字
  155.         self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
  156.         # x 為要描繪文字的加法運算
  157.         x += self.contents.text_size(c).width
  158.       end
  159.     end
  160.     # 選擇項的情況
  161.     if $game_temp.choice_max > 0
  162.       @item_max = $game_temp.choice_max
  163.       self.active = true
  164.       self.index = 0
  165.     end
  166.     # 輸入數值的情況
  167.     if $game_temp.num_input_variable_id > 0
  168.       digits_max = $game_temp.num_input_digits_max
  169.       number = $game_variables[$game_temp.num_input_variable_id]
  170.       @input_number_window = Window_InputNumber.new(digits_max)
  171.       @input_number_window.number = number
  172.       @input_number_window.x = self.x + 8
  173.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  174.     end
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 設定視窗位置與不透明度
  178.   #--------------------------------------------------------------------------
  179.   def reset_window
  180.     if $game_temp.in_battle
  181.       self.y = 16
  182.     else
  183.     #▼▼▼▼▼調整視窗座標
  184.       case $game_system.message_position
  185.       when 0  # 上
  186.         self.y = 6
  187.       when 1  # 中
  188.         self.y = 150
  189.       when 2  # 下
  190.         self.y = 300
  191.       end
  192.     #▲▲▲▲▲
  193.     end
  194.         #▼▼▼▼▼使內建對話框永遠透明
  195.     if $game_system.message_frame == 0
  196.       self.opacity = 0
  197.     else
  198.       self.opacity = 0
  199.     end
  200.     self.back_opacity = 0
  201.         #▲▲▲▲▲
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 更新畫面
  205.   #--------------------------------------------------------------------------
  206.   def update
  207.     super
  208.     # 漸變的情況下
  209.     if @fade_in
  210.       self.contents_opacity += 24
  211.       if @input_number_window != nil
  212.         @input_number_window.contents_opacity += 24
  213.       end
  214.       if self.contents_opacity == 255
  215.         @fade_in = false
  216.       end
  217.       return
  218.     end
  219.     # 輸入數值的情況下
  220.     if @input_number_window != nil
  221.       @input_number_window.update
  222.       # 確定
  223.       if Input.trigger?(Input::C)
  224.         $game_system.se_play($data_system.decision_se)
  225.         $game_variables[$game_temp.num_input_variable_id] =
  226.           @input_number_window.number
  227.         $game_map.need_refresh = true
  228.         # 釋放輸入數值視窗
  229.         @input_number_window.dispose
  230.         @input_number_window = nil
  231.         terminate_message
  232.       end
  233.       return
  234.     end
  235.     # 顯示訊息中的情況下
  236.     if @contents_showing
  237.       # 如果不是在顯示選擇項中就顯示暫停標誌
  238.       if $game_temp.choice_max == 0
  239.         self.pause = true
  240.       end
  241.       # 取消
  242.       if Input.trigger?(Input::B)
  243.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  244.           $game_system.se_play($data_system.cancel_se)
  245.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  246.           terminate_message
  247.         end
  248.       end
  249.       # 確定
  250.       if Input.trigger?(Input::C)
  251.         if $game_temp.choice_max > 0
  252.           $game_system.se_play($data_system.decision_se)
  253.           $game_temp.choice_proc.call(self.index)
  254.         end
  255.         terminate_message
  256.       end
  257.       return
  258.     end
  259.     # 在漸變以外的狀態下有等待顯示的訊息與選擇項的場合
  260.     if @fade_out == false and $game_temp.message_text != nil
  261.       @contents_showing = true
  262.       $game_temp.message_window_showing = true
  263.       reset_window
  264.       refresh
  265.       Graphics.frame_reset
  266.       self.visible = true
  267.       self.contents_opacity = 0
  268.       if @input_number_window != nil
  269.         @input_number_window.contents_opacity = 0
  270.       end
  271.       @fade_in = true
  272.       return
  273.     end
  274.     # 沒有可以顯示的訊息、但是視窗為可見的情況下
  275.     if self.visible
  276.       @fade_out = true
  277.       self.opacity -= 48
  278.       if self.opacity == 0
  279.         self.visible = false
  280.         @fade_out = false
  281.         $game_temp.message_window_showing = false
  282.       end
  283.       return
  284.     end
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 更新游標矩形
  288.   #--------------------------------------------------------------------------
  289.   def update_cursor_rect
  290.     if @index >= 0
  291.       n = $game_temp.choice_start + @index
  292.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  293.     else
  294.       self.cursor_rect.empty
  295.     end
  296.   end
  297. end
复制代码
好像没看到什么get window size之类的,试了修改super()中的4个值,发现只能改变对话框的位置,对文字的排版没有任何效果。
到底该怎么弄呢?唉~~~
作者: jolliers    时间: 2010-8-8 22:05
纠正一下上面的,是使用这个脚本可以任意指定一张图片(在上面的脚本的77行的“对话框1”哪里)作对话框,而原来的对话框则已经设置透明度为零(脚本195—202行)。不过问题在于怎么使字能显示的长度与对话框长度一致。。
各位大大们来看看啊,感激不尽!!!
作者: jolliers    时间: 2010-8-8 22:07
回复 后知后觉 的帖子
是的,字体我缩小了,是为了测试一下字体修改后的结果。这个不是重点,调成大字体也是这个问题,不能显示成对话框的长度。。

   
作者: IamI    时间: 2010-8-8 22:07
对话框中的回车是硬回车,也就是说在对话框中的每一个换行在脚本中都按实际的回车计算。
除了修改RM以外,目前唯一的解就是,做几个用不到的角色,名字为要补充的文字
然后用\n[]来减少该行上的文字
作者: jolliers    时间: 2010-8-8 22:07
回复 幻の飞鱼 的帖子

对话框脚本我已经贴出来了,麻烦看一下好吗?谢谢了~~
   
作者: jolliers    时间: 2010-8-8 22:09
回复 dantesy 的帖子


    那个-32我已经去掉,在我贴出来的脚本中可以看到,不过问题还是没解决,不知道怎么弄啊~~
作者: dantesy    时间: 2010-8-8 23:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2010-8-9 14:04
如果你可以把那几句话好好的排版一下.
效果应该就会好很多..
比如把图中第一行的“战斗系统”4个字前面换一下行
图中第2行的“目前只能”4个字前面换一下行
那个人感觉就会好很多了...
像这样风格的对话框.如果要把窗口width调整成内容最长一样的话
那如果窗口内只写了2.3个字.那窗口的width就会很小.看上去就更 囧 了
这样的设置一般用于 FUKI 对话框...
想要这样的效果你可以改用FUKI对话框.
淡然你如果坚持要在这样风格的对话框用这样的效果的话...
没什么难度...我到是可以帮你改一改.不过仅仅针对默认的对话框脚本..
因为默认的比较熟悉.而别人写的就懒得去看了...
作者: jolliers    时间: 2010-8-11 13:08
回复 dantesy 的帖子


修改之后出现了错误,唉~~麻烦再给看一下吧,琢磨好久了……



作者: jolliers    时间: 2010-8-11 13:11
回复 后知后觉 的帖子

那我试试fuki对话框吧,唉……
   
作者: huyunchong    时间: 2010-8-11 13:13
字体貌似小了点,这样看上去的话行距也就大得奇怪了,一般情况下,把字体改大点,右边
应该也就没什么空白了。
作者: jolliers    时间: 2010-8-11 15:27
回复 huyunchong 的帖子

改字体大小还是会出点问题,达不到想要的效果。



作者: 逸豫    时间: 2010-8-11 15:36
在描绘过程中删掉所有的"\n",然后重新分行描绘




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