Project1

标题: 如何讓字串自動換行 [打印本页]

作者: wix3000    时间: 2012-2-1 10:52
标题: 如何讓字串自動換行
本帖最后由 wix3000 于 2012-2-1 16:33 编辑

如題,想做個多行的道具說明
但是不知道該如何讓字串自動換行。
難道是要一行一行用draw_text嗎?
作者: 凌童鞋    时间: 2012-2-1 12:30
  1. class Bitmap
  2.   WLH = 24
  3.   FWLH = WLH + 0.0
  4.   def draw_text_autoline_plus(x,y,width,height,text)
  5.     all_size = text_size(text)
  6.     lines = all_size.width / (width + 0.0)
  7.     only_lines = height / FWLH
  8.     cut = only_lines / lines
  9.     cut = 1 if cut > 1
  10.     ox = x
  11.     oy = y
  12.     loop do
  13.       c = text.slice!(/./m)
  14.       break if c == nil
  15.       rect = text_size(c)
  16.       if ox + rect.x * cut > x + width
  17.         ox = x
  18.         oy += WLH
  19.         if oy > y + height
  20.           print "在执行draw_text_autoline_plus时光荣壮烈= =b"
  21.           return
  22.         end
  23.       end
  24.       draw_text(ox,oy,rect.width * cut,WLH,c,1)
  25.       ox += rect.width * cut
  26.     end
  27.   end
  28. end
复制代码
来自:http://rpg.blue/thread-131213-1-1.html
经测试VA可用
作者: 叶子    时间: 2012-2-1 12:42
修改RGSS3 Window_Base.draw_text_ex() 版本

  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Base
  4. #------------------------------------------------------------------------------
  5. #  游戏中所有窗口的父类
  6. #==============================================================================

  7. class Window_Base < Window
  8.   #--------------------------------------------------------------------------
  9.   # ● 绘制带有控制符的文本内容
  10.   #   如果传递了width参数的话,会自动换行
  11.   #--------------------------------------------------------------------------
  12.   def draw_text_ex(x, y, text, width = nil)
  13.     reset_font_settings
  14.     text = convert_escape_characters(text)
  15.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  16.     if width != nil
  17.       pos[:width] = width
  18.     end
  19.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 文字的处理
  23.   #     c    : 文字
  24.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  25.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  26.   #--------------------------------------------------------------------------
  27.   def process_character(c, text, pos)
  28.     case c
  29.     when "\r"   # 回车
  30.       return
  31.     when "\n"   # 换行
  32.       process_new_line(text, pos)
  33.     when "\f"   # 翻页
  34.       process_new_page(text, pos)
  35.     when "\e"   # 控制符
  36.       process_escape_character(obtain_escape_code(text), text, pos)
  37.     else        # 普通文字
  38.       text_width = text_size(c).width
  39.       if pos[:width] != nil && pos[:x] - pos[:new_x] + text_width > pos[:width]
  40.         process_new_line(text, pos)
  41.       end
  42.       process_normal_character(c, pos)
  43.     end
  44.   end
  45. end
复制代码

作者: yangff    时间: 2012-2-1 12:45
    def onTextareaRender(sender,e)
      bitmap=e.get(:bitmap)
      bitmap.clear
      bitmap.font=@font
      @x=0
      @y=0
      @maxheight=0
      #@text.each_byte{|b|
      for i in [email protected]
        b=@text
        if b!="\r"
          @size=bitmap.text_size(b)
          @maxheight = 0 if @maxheight.nil?
          @maxheight=[@maxheight,@size.height].max
          if (@[email protected]>@rect.width) or b=="\n"
            @x=0
            @y+=@maxheight
            @maxheight=0
          end
          bitmap.draw_text(@x,@y,@size.width*2+1,@size.height+1,b) if b!="\n"
          @[email protected] if b!="\n"
        end
      end
      #}
      return false
    end




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