Project1

标题: (伸了一下手)关于地图上显示信息的脚本(Mess_Text) [打印本页]

作者: Wind2010    时间: 2011-11-27 10:54
标题: (伸了一下手)关于地图上显示信息的脚本(Mess_Text)
本帖最后由 Wind2010 于 2011-11-27 11:18 编辑
  1. #==============================================================================
  2. # ■ module Mess_Text
  3. #------------------------------------------------------------------------------
  4. #  在地图上显示文章的模块。
  5. #==============================================================================
  6. module Mess_Text
  7.   MAX_LINE = 11  # 最大的行数
  8.   MAX_TIME = 999 # 文字的维持时间
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化
  11.   #--------------------------------------------------------------------------
  12.   def self.ini
  13.     @text_sprite = Sprite.new
  14.     @text_sprite.bitmap = Bitmap.new(350,190)
  15.     @text_sprite.x = 32
  16.     @text_sprite.y = 480-196
  17.     @text_sprite.z = 10
  18.     @beijing = Sprite.new
  19.     @beijing.bitmap = Bitmap.new(350,190)
  20.     @beijing.x = @text_sprite.x
  21.     @beijing.y = @text_sprite.y
  22.     @beijing.z = @text_sprite.z - 1
  23.     @beijing.bitmap.fill_rect(0,0,350,190,Color.new(0,0,0,150))
  24.     @beijing.opacity = 0
  25.     @line = 0
  26.     @time = MAX_TIME
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 设置可见度
  30.   #--------------------------------------------------------------------------
  31.   def self.visible=(v)
  32.     @text_sprite.opacity = v
  33.     @beijing.opacity = v == 255 ? 150 : 0
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 获取可见度
  37.   #--------------------------------------------------------------------------
  38.   def self.visible
  39.     return @text_sprite.disposed? ? false : @text_sprite.visible
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 释放
  43.   #--------------------------------------------------------------------------
  44.   def self.dispose
  45.     @text_sprite.dispose
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 清空
  49.   #--------------------------------------------------------------------------
  50.   def self.clear
  51.     @text_sprite.bitmap.clear
  52.     @line = 0
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 刷新
  56.   #--------------------------------------------------------------------------
  57.   def self.update
  58.     if @time > 0
  59.       @time -= 1
  60.     end
  61.     if @time <= 0
  62.       @text_sprite.bitmap.clear
  63.       @line = 0
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 刷新
  68.   #--------------------------------------------------------------------------
  69.   def self.write(str)
  70.     #$game_system.map_text.push(str)
  71.     x = 0
  72.     if @line >= MAX_LINE
  73.       @text_sprite.bitmap.clear
  74.       @line = 0
  75.     end
  76.     @text_sprite.bitmap.font.size = 16
  77.     # 有等待显示的文字的情况下
  78.     if str != nil
  79.       text = str.dup
  80.       # 限制文字处理
  81.       begin
  82.         last_text = text.clone
  83.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  84.       end until text == last_text
  85.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  86.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  87.       end
  88.       # 为了方便、将 "\\\\" 变换为 "\000"
  89.       text.gsub!(/\\\\/) { "\000" }
  90.       # "\\C" 变为 "\001" に、"\\G" 变为 "\002"
  91.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  92.       text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\002[#{$1}]" }
  93.       # "\P" 变为 "\003"
  94.       text.gsub!(/\\[Pp]/) { "\003" }
  95.       # c 获取 1 个字 (如果不能取得文字就循环)
  96.       while ((c = text.slice!(/./m)) != nil)
  97.         # \\ 的情况下
  98.         if c == "\000"
  99.           # 还原为本来的文字
  100.           c = "\\"
  101.         end
  102.         # \C[n] 的情况下
  103.         if c == "\001"
  104.           # 更改文字色
  105.           text.sub!(/\[([0-9]+)\]/, "")
  106.           color = $1.to_i
  107.           if color >= 0 and color <= 7
  108.             @text_sprite.bitmap.font.color = text_color(color)
  109.           end
  110.           # 下面的文字
  111.           next
  112.         end
  113.         # \S[n] 的情况下
  114.         if c == "\002"
  115.           # 更改字体大小
  116.           text.sub!(/\[([0-9]+)\]/, "")
  117.           size = $1.to_i
  118.           @text_sprite.bitmap.font.size = size
  119.         end
  120.         # 图片的情况下
  121.         if c == "\003"
  122.           pic_name = ''
  123.           while ((cha = text.slice!(/./m)) != ']')
  124.             next if cha == '['
  125.             pic_name += cha
  126.           end
  127.           pic = RPG::Cache.picture(pic_name)
  128.           @text_sprite.bitmap.blt(x + 4, @line * @text_sprite.bitmap.font.size, pic, Rect.new(0, 0, pic.width, pic.height))
  129.           x += pic.width
  130.           next
  131.         end
  132.         if x > 350-32
  133.           # y 加 1
  134.           @line += 1
  135.           x = 0
  136.           # 下面的文字
  137.           next
  138.         end
  139.         # 另起一行文字的情况下
  140.         if c == "\n"
  141.           # y 加 1
  142.           @line += 1
  143.           x = 0
  144.           # 下面的文字
  145.           next
  146.         end
  147.         # 描绘文字
  148.         @text_sprite.bitmap.draw_text(4 + x, @text_sprite.bitmap.font.size * @line, 40, 32, c)
  149.         # x 为要描绘文字的加法运算
  150.         x += @text_sprite.bitmap.text_size(c).width
  151.       end
  152.     end
  153.     @line += 1
  154.     @time = MAX_TIME
  155.   end
  156. =begin
  157.   def self.write(str)
  158.     if @line >= MAX_LINE
  159.       @text_sprite.bitmap.clear
  160.       @line = 0
  161.     end
  162.     @text_sprite.bitmap.font.size = 16
  163.     cw = @text_sprite.bitmap.text_size(str).width
  164.     @text_sprite.bitmap.draw_text(0, @line * @text_sprite.bitmap.font.size, cw, 20, str)
  165.     @line += 1
  166.     @time = MAX_TIME
  167.   end
  168. =end
  169.   #--------------------------------------------------------------------------
  170.   # ● 获取文字色
  171.   #     n : 文字色编号 (0~7)
  172.   #--------------------------------------------------------------------------
  173.   def self.text_color(n)
  174.     case n
  175.     when 0
  176.       return Color.new(255, 255, 255, 255)
  177.     when 1
  178.       return Color.new(128, 128, 255, 255)
  179.     when 2
  180.       return Color.new(255, 128, 128, 255)
  181.     when 3
  182.       return Color.new(128, 255, 128, 255)
  183.     when 4
  184.       return Color.new(128, 255, 255, 255)
  185.     when 5
  186.       return Color.new(255, 128, 255, 255)
  187.     when 6
  188.       return Color.new(255, 255, 128, 255)
  189.     when 7
  190.       return Color.new(192, 192, 192, 255)
  191.     else
  192.       normal_color
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 获取普通文字色
  197.   #--------------------------------------------------------------------------
  198.   def self.normal_color
  199.     return Color.new(255, 255, 255, 255)
  200.   end
  201. end
  202. class Scene_Title
  203.   alias l_mes_main main unless defined?(l_mes_main)
  204.   def main
  205.     Mess_Text.clear
  206.     l_mes_main
  207.   end
  208. end
复制代码
目前这个脚本在写满了的时候会将文字清空后重新描述,如何让当文字满的时候再描绘的话是将最上面一条清除掉,剩下的往上移,然后再描绘?


自己改了下,虽然有字体问题我还是忍了,成功dsu_plus_rewardpost_czw




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