查看: 88|回复: 0

[转载发布] RPGMaker XP脚本 【泛用画面弹框 BGM显示】

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月六日(秋) | 显示全部楼层 |阅读模式
    功能:
    提供一组自动设置大小的弹出式提示框,可以在所有的Scene里弹出显示文字,一段时间后自动消失
    附带:显示当前BGM名字的脚本
    效果:左上角窗口。


    RUBY 代码
    [code]#==============================================================================  
    # ■ 自动弹框+地图BGM显示   
    # 修改自地图名显示脚本 by Yuee  
    # 原脚本取自66RPG http://rpg.blue  
    #------------------------------------------------------------------------------  
    # 功能:提供一组自动设置大小的弹出式提示框  
    # 可以在所有的Scene里弹出显示文字  
    # 一段时间后自动消失  
    # 用法:  
    # 事件或脚本中直接调用以下代码  
    # $scene.popup(text, mode, x, y)  
    #  
    # text:要使用的文字。可以使用FUKI的转义法,和多行文字。例如:"新任务: \\c[6]"[email protected]  
    # mode:模式字符串  
    #       later:在前面的弹框显示完之后再显示  
    #       其他任意:马上显示  
    # x,y :位置  
    #       不指定位置:窗口会自动放在屏幕上中且不会遮挡其他自动窗口  
    #       指定位置:窗口会放在指定位置,会和同一位置其他窗口重合  
    # 样例:  
    #       在屏幕中心显示任务信息:  $scene.popup("任务情报更新了: \\c[6]"+@missions[name].name_b, "now")  
    #       在屏幕左上方显示BGM名称: $scene.popup("♫BGM: " +$game_system.playing_bgm.name, "later", 0, 0)  

    # ps:如果想关闭显示,可以打开SWITCH指定的公共开关(默认#25)  
    #==============================================================================  
    module FUKImini  
      #--------------------------------------------------------------------------  
      # ○ 描绘信息处理 in FUKI  
      #--------------------------------------------------------------------------  
      def draw_message(msg)  
          text=msg  
          # 限制文字处理  
          begin  
            last_text = text.clone  
            text.gsub!(/\
    Vv]\[([0−9]+)
    /){$game_variables[$1.to_i]}  
          enduntil text == last_text  
          text.gsub!(/\
    Nn]\[([0−9]+)
    /)do  
            $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""  
          end  
          # 为了方便、将 "\\\\" 变换为 "\000"   
          text.gsub!(/\\\\/){"\000"}  
          # "\\C" 变为 "\001"、"\\G" 变为 "\002"  
          text.gsub!(/\
    Cc]\[([0−9]+)
    /){"\001[#{$1}]"}  
          text.gsub!(/\\[Gg]/){"\002"}  
          # c 获取 1 个字  
          if((c = text.slice!(/./m)) != nil)  
            # 选择项的情况  
    =begin  
            if @dy >= $game_temp.choice_start  
              # 处理字的缩进  
              @dx = 8  
              # 描绘文字  
              self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)  
              # x 为要描绘文字宽度的加法运算  
              @dx += self.contents.text_size(c).width  
              # 循环  
              while ((c = text.slice!(/./m)) != "\n")  
                # 描绘文字  
                self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)  
                # x 为要描绘文字宽度的加法运算  
                @dx += self.contents.text_size(c).width  
              end  
              if c == "\n"  
                # 更新光标宽度  
                @cursor_width = [@cursor_width, @dx].max  
                # dy 累加 1  
                @dy += 1  
                @dx = 0  
              end  
              return  
            end  
    =end  
            # \\ 的情况下  
            if c == "\000"  
              # 还原为本来的文字  
              c = "\\"  
            end  
            #\C[n] 的情况下  
            if c == "\001"  
              # 更改文字色  
              text.sub!(/
    ([0−9]+)
    /, "")  
              color = $1.to_i  
              if color >= 0and color = 128 ? 32 : 384  
                end  
                @gold_window.opacity = self.opacity  
                @gold_window.back_opacity = self.back_opacity  
              end  
            end  
            # 另起一行文字的情况下  
            if c == "\n"  
              # dy 累加 1  
              @dy += 1  
              @dx = 0  
            end  
            # 描绘文字  
            # self.contents.font.size = FUKI::MES_FONT_SIZE  
            font_size = self.contents.font.size  
            if c == "\001"or c == "\002"or c == "\003"or c == "\n"  
             c = ""  
            else  
             self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)  
            end  

            @dx += self.contents.text_size(c).width  
          end  
      end  
    end  

    #==============================================================================  
    # ■ 自动弹框+地图BGM显示  
    #     by viktor  
    #------------------------------------------------------------------------------  
    # Window_PopText 弹框窗口类 修改自地图名显示脚本 by Yuee  
    #==============================================================================  
    class Window_PopText < Window_Base  
      # 暂时屏蔽用的开关  
      SWITCH = 25  

      # 显示时间设置  
      SHOW_TIME_0 = 10  # 地图名出现前等待的帧数  
      SHOW_TIME_1 = 10  # 地图名从不可见变成可见的帧数  
      SHOW_TIME_2 = 140  # 地图名完全可见的帧数  
      SHOW_TIME_3 = 26  # 地图名从可见变成不可见的帧数  

      # 完全可见时的透明度设置  
      OPACITY_1 = 130   # 边框  
      OPACITY_2 = 130   # 背景  
      OPACITY_3 = 255   # 文字  

      # 地图名字的颜色  
      TEXT_COLOR = Color.new(240, 240, 240, 240)  

      attr_accessor :fsize  
      attr_reader :alive  

      def initialize(x, y, width, height)  
        super(x, y, width, height)  
        # 初始化窗口透明度  
        self.opacity = 0  
        self.back_opacity = 0  
        self.contents_opacity = 0  
        self.contents = Bitmap.new(width - 32, height - 32)  
        @fsize=32  
        # 剩余帧数初始化  
        @show_time = 0  
        @text=nil  
        @display_time = SHOW_TIME_0 + SHOW_TIME_1 + SHOW_TIME_2 + SHOW_TIME_3  
      end  

      def bottom  
        returnself.y+self.height  
      end  

      def scale_time(x)  
        @show_time *=x  
      end  

      include FUKImini  

      def set_text(text)  
        # 设置显示时间  
        # 插入文字  
        if text!=nil      
          @text=text  
          @alive=true  
          @show_time=@display_time  
        end  
        @dx=@dy=0  
      end  

      def update  
        # 开关判断  
        #return if !$game_switches[SWITCH]  
        #p "here"  
        super  
        returnif !@alive  
        time=@display_time  
        # 剩余帧数为0时消失  
         if@show_time < 1  
            @alive=false  
            self.opacity = 0  
            self.back_opacity = 0  
            self.contents_opacity = 0  
            @show_time=0  
            return  
         end  
        # 主处理  
        #self.contents.clear  
        #self.contents.font.color = TEXT_COLOR  
        # 描绘  
        yy=0  
        self.contents.font.size=fsize  
        self.contents.font.name="Arial"  
        #@text.each{|line|  
        #  self.contents.draw_text(4, yy , width - 40, fsize, line, 1)  
        #  yy+=fsize+4  
        #}  
        # viktor: 调用fuki的打字函数  
        draw_message(@text)  
        # 根本帧数设定窗口透明度  
        if@show_time > (SHOW_TIME_2 + SHOW_TIME_3)  
          self.opacity = @show_time < time ? (((OPACITY_1 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0  
          self.back_opacity = @show_time < time ? (((OPACITY_2 / SHOW_TIME_1 )* (time - @show_time)).to_i) : 0  
          self.contents_opacity = @show_time < time ? (((OPACITY_3 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0  
        else  
          self.opacity = @show_time < (SHOW_TIME_3 / 16 * 14) ? ((OPACITY_1 / SHOW_TIME_3) * @show_time).to_i : OPACITY_1  
          self.back_opacity = @show_time < (SHOW_TIME_3 / 16 * 9) ? ((OPACITY_2 / SHOW_TIME_3) * @show_time).to_i : OPACITY_2  
          self.contents_opacity = @show_time < SHOW_TIME_3 ? ((OPACITY_3 / SHOW_TIME_3)* @show_time).to_i : OPACITY_3  
        end        
        @show_time -= 1  

      end  
    end  

    #------------------------------------  
    # Windowset_PopText  
    # 管理弹出窗口的窗口组。当前显示的窗口在window中,等待队列的窗口在window_queue中  
    #------------------------------------  
    class Windowset_PopText  
      def initialize  
        @window=[]  
        @window_queue=[]  
      end  

      def add_window(text, mode="later", x=-1, y=-1)  
          # 计算文字行数和长度  
          len=0; nline=0  
          text.each{|line|  
            nline+=1  
            len=[len, line.size].max  
          }  
          nline=[nline, 1].max  
          # 字体大小  
          fsize=[[140/nline-4, 9].max, 24].min  
          # 窗口大小  
          h=[(fsize+4)*nline+28, 140].min  
          w=[[fsize*(len/2+4), 140].max, $height].min  
          # 窗口位置  
          if x+y
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-10 12:14 , Processed in 0.049307 second(s), 43 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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