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

Project1

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

[已经解决] 关于改变对话框的背景

[复制链接]

Lv2.观梦者

梦石
0
星屑
457
在线时间
1409 小时
注册时间
2010-9-23
帖子
557
跳转到指定楼层
1
发表于 2012-8-23 11:22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Luciffer 于 2012-8-23 16:24 编辑

尝试学习AVG对话框,想让默认的对话框背景由一张图片来显示,请问应该怎样修改 Window_Message 呢?

PS:不是我不想用代码文字把脚本框起来,而是一这样做后点击保存后就啥也看不到了,不知道是网络问题还是论坛的问题,每次自己发帖贴脚本时总是这样...... = =


#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
#  显示文章的信息窗口。
#==============================================================================

class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 常量
  #--------------------------------------------------------------------------
  MAX_LINE = 4                            # 最大行数
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 288, 544, 128)
    self.z = 200
    self.active = false
    self.index = -1
    self.openness = 0
    @opening = false            # 窗口正在打开标志
    @closing = false            # 窗口正在关闭标志
    @text = nil                 # 尚未显示文章
    @contents_x = 0             # 描绘下一字的 X 座标
    @contents_y = 0             # 描绘下一字的 Y 座标
    @line_count = 0             # 以描绘行数
    @wait_count = 0             # 等待祯数
    @background = 0             # 背景类型
    @position = 2               # 显示位置
    @show_fast = false          # 瞬间表示文章标志
    @line_show_fast = false     # 行快速显示文章标志
    @pause_skip = false         # 不等待输入标志
    create_gold_window
    create_number_input_window
    create_back_sprite
  end
  #--------------------------------------------------------------------------
  # ● 释放窗口
  #--------------------------------------------------------------------------
  def dispose
    super
    dispose_gold_window
    dispose_number_input_window
    dispose_back_sprite
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    update_gold_window
    update_number_input_window
    update_back_sprite
    update_show_fast
    unless @opening or @closing             # 窗口非正在打开或正在关闭中
      if @wait_count > 0                    # 文间等待
        @wait_count -= 1
      elsif self.pause                      # 等待输入的情况下
        input_pause
      elsif self.active                     # 输入选择的情况下
        input_choice
      elsif @number_input_window.visible    # 输入数值的情况下
        input_number
      elsif @text != nil                    # 有等待显示的文字的情况下
        update_message                        # 更新文章
      elsif continue?                       # 继续的情况下
        start_message                         # 开始文章
        open                                  # 打开窗口
        $game_message.visible = true
      else                                  # 否则
        close                                 # 关闭窗口
        $game_message.visible = @closing
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成金钱窗口
  #--------------------------------------------------------------------------
  def create_gold_window
    @gold_window = Window_Gold.new(384, 0)
    @gold_window.openness = 0
  end
  #--------------------------------------------------------------------------
  # ● 生成数值输入窗口
  #--------------------------------------------------------------------------
  def create_number_input_window
    @number_input_window = Window_NumberInput.new
    @number_input_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 生成背景活动块
  #--------------------------------------------------------------------------
  def create_back_sprite
    @back_sprite = Sprite.new
    @back_sprite.bitmap = Cache.system("MessageBack")
    @back_sprite.visible = (@background == 1)
    @back_sprite.z = 190
  end
  #--------------------------------------------------------------------------
  # ● 释放金钱窗口
  #--------------------------------------------------------------------------
  def dispose_gold_window
    @gold_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 释放数值输入窗口
  #--------------------------------------------------------------------------
  def dispose_number_input_window
    @number_input_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 释放背景活动块
  #--------------------------------------------------------------------------
  def dispose_back_sprite
    @back_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● 更新金钱窗口
  #--------------------------------------------------------------------------
  def update_gold_window
    @gold_window.update
  end
  #--------------------------------------------------------------------------
  # ● 更新数值输入窗口
  #--------------------------------------------------------------------------
  def update_number_input_window
    @number_input_window.update
  end
  #--------------------------------------------------------------------------
  # ● 更新背景活动块
  #--------------------------------------------------------------------------
  def update_back_sprite
    @back_sprite.visible = (@background == 1)
    @back_sprite.y = y - 16
    @back_sprite.opacity = openness
    @back_sprite.update
  end
  #--------------------------------------------------------------------------
  # ● 更新快速显示文章标志
  #--------------------------------------------------------------------------
  def update_show_fast
    if self.pause or self.openness < 255
      @show_fast = false
    elsif Input.trigger?(Input::C) and @wait_count < 2
      @show_fast = true
    elsif not Input.press?(Input::C)
      @show_fast = false
    end
    if @show_fast and @wait_count > 0
      @wait_count -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 判断下面的文章是否接着显示
  #--------------------------------------------------------------------------
  def continue?
    return true if $game_message.num_input_variable_id > 0
    return false if $game_message.texts.empty?
    if self.openness > 0 and not $game_temp.in_battle
      return false if @background != $game_message.background
      return false if @position != $game_message.position
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 开始显示文章
  #--------------------------------------------------------------------------
  def start_message
    @text = ""
    for i in 0...$game_message.texts.size
      @text += "    " if i >= $game_message.choice_start
      @text += $game_message.texts.clone + "\x00"
    end
    @item_max = $game_message.choice_max
    convert_special_characters
    reset_window
    new_page
  end
  #--------------------------------------------------------------------------
  # ● 新页处理
  #--------------------------------------------------------------------------
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      name = $game_message.face_name
      index = $game_message.face_index
      draw_face(name, index, 0, 0)
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end
  #--------------------------------------------------------------------------
  # ● 新行处理
  #--------------------------------------------------------------------------
  def new_line
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      @contents_x = 112
    end
    @contents_y += WLH
    @line_count += 1
    @line_show_fast = false
  end
  #--------------------------------------------------------------------------
  # ● 转换特殊符号
  #--------------------------------------------------------------------------
  def convert_special_characters
    @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
    @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
    @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
    @text.gsub!(/\\G/)              { "\x02" }
    @text.gsub!(/\\\./)             { "\x03" }
    @text.gsub!(/\\\|/)             { "\x04" }
    @text.gsub!(/\\!/)              { "\x05" }
    @text.gsub!(/\\>/)              { "\x06" }
    @text.gsub!(/\\</)              { "\x07" }
    @text.gsub!(/\\\^/)             { "\x08" }
    @text.gsub!(/\\\\/)             { "\\" }
  end
  #--------------------------------------------------------------------------
  # ● 设定窗口背景和位置
  #--------------------------------------------------------------------------
  def reset_window
    @background = $game_message.background
    @position = $game_message.position
    if @background == 0   # 一般窗口
      self.opacity = 255
    else                  # 背景变暗并透明化
      self.opacity = 0
    end
    case @position
    when 0  # 上
      self.y = 0
      @gold_window.y = 360
    when 1  # 中
      self.y = 144
      @gold_window.y = 0
    when 2  # 下
      self.y = 288
      @gold_window.y = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 结束文章显示
  #--------------------------------------------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    @gold_window.close
    @number_input_window.active = false
    @number_input_window.visible = false
    $game_message.main_proc.call if $game_message.main_proc != nil
    $game_message.clear
  end
  #--------------------------------------------------------------------------
  # ● 更新文章显示
  #--------------------------------------------------------------------------
  def update_message
    loop do
      c = @text.slice!(/./m)            # 获取一个文字
      case c
      when nil                          # 无法获取文字时
        finish_message                  # 结束文章更新
        break
      when "\x00"                       # 新行
        new_line
        if @line_count >= MAX_LINE      # 当行数已至最大行数
          unless @text.empty?           # 并还有有等待显示的文字时
            self.pause = true           # 等待输入
            break
          end
        end
      when "\x01"                       # \C[n](文字变色)
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"                       # \G  (显示金钱)
        @gold_window.refresh
        @gold_window.open
      when "\x03"                       # \.  (等待四分之一秒)
        @wait_count = 15
        break
      when "\x04"                       # \|  (等待一秒)
        @wait_count = 60
        break
      when "\x05"                       # \!  (等待输入)
        self.pause = true
        break
      when "\x06"                       # \>  (瞬间表示on)
        @line_show_fast = true
      when "\x07"                       # \<  (瞬间表示off)
        @line_show_fast = false
      when "\x08"                       # \^  (不等待输入)
        @pause_skip = true
      else                              # 一般文字
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
      end
      break unless @show_fast or @line_show_fast
    end
  end
  #--------------------------------------------------------------------------
  # ● 结束文章更新
  #--------------------------------------------------------------------------
  def finish_message
    if $game_message.choice_max > 0
      start_choice
    elsif $game_message.num_input_variable_id > 0
      start_number_input
    elsif @pause_skip
      terminate_message
    else
      self.pause = true
    end
    @wait_count = 10
    @text = nil
  end
  #--------------------------------------------------------------------------
  # ● 开始选择项
  #--------------------------------------------------------------------------
  def start_choice
    self.active = true
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 开始数值输入
  #--------------------------------------------------------------------------
  def start_number_input
    digits_max = $game_message.num_input_digits_max
    number = $game_variables[$game_message.num_input_variable_id]
    @number_input_window.digits_max = digits_max
    @number_input_window.number = number
    if $game_message.face_name.empty?
      @number_input_window.x = x
    else
      @number_input_window.x = x + 112
    end
    @number_input_window.y = y + @contents_y
    @number_input_window.active = true
    @number_input_window.visible = true
    @number_input_window.update
  end
  #--------------------------------------------------------------------------
  # ● 刷新光标
  #--------------------------------------------------------------------------
  def update_cursor
    if @index >= 0
      x = $game_message.face_name.empty? ? 0 : 112
      y = ($game_message.choice_start + @index) * WLH
      self.cursor_rect.set(x, y, contents.width - x, WLH)
    else
      self.cursor_rect.empty
    end
  end
  #--------------------------------------------------------------------------
  # ● 等待输入处理
  #--------------------------------------------------------------------------
  def input_pause
    if Input.trigger?(Input::B) or Input.trigger?(Input::C)
      self.pause = false
      if @text != nil and not @text.empty?
        new_page if @line_count >= MAX_LINE
      else
        terminate_message
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 选择项处理
  #--------------------------------------------------------------------------
  def input_choice
    if Input.trigger?(Input::B)
      if $game_message.choice_cancel_type > 0
        Sound.play_cancel
        $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
        terminate_message
      end
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      $game_message.choice_proc.call(self.index)
      terminate_message
    end
  end
  #--------------------------------------------------------------------------
  # ● 名称输入处理
  #--------------------------------------------------------------------------
  def input_number
    if Input.trigger?(Input::C)
      Sound.play_decision
      $game_variables[$game_message.num_input_variable_id] =
        @number_input_window.number
      $game_map.need_refresh = true
      terminate_message
    end
  end
end

Lv2.观梦者

梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
帖子
1283
2
发表于 2012-8-23 15:34:58 | 只看该作者
建议用对话框加强脚本
里面就有这个换对话框背景的功能
不用修改脚本了

对话框加强版 1.08.1030.zip (601.71 KB, 下载次数: 124)

点评

不好意思......我的分成负的了= =||  发表于 2012-8-23 16:09
谢谢您的帮助,也许我不会用这个脚本,不过我会慢慢学。 =A=  发表于 2012-8-23 15:59
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。
回复

使用道具 举报

Lv1.梦旅人

沉睡的八宝粥 

梦石
0
星屑
64
在线时间
832 小时
注册时间
2011-4-22
帖子
2996

短篇七萝莉正太组季军

3
发表于 2012-8-23 15:53:58 | 只看该作者
憋了好久 看到ls发脚本我就说了吧。
LZ想显示一张图片,那么就请把system文件下的messageBack改成你想要的图片,然后每次对话都用“背景变暗”,很简单吧...

点评

虽然我试过了,效果不太好,但还是谢谢你的帮助~! =A=  发表于 2012-8-23 16:00

评分

参与人数 1星屑 +12 收起 理由
歌莉·萌露 + 12 感觉效果不太好,不过值得一试.

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 08:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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