Sujet n°10380
Posté par Legendaire45 le 10 Sep - 18:36 (2011)
Titre : passer automatiquement un message
Bonjour, j’aimerai savoir comment faire en sorte qu'un message disparaisse automatiquement après avoir été afficher entièrement sans que le joueur appuie sur une touche.j'utilise la fonction afficher un message de rmxp

voici les script qui font fonctionner cette fonction:

script windows_message:

Code:

#==============================================================================
# ■ Window_Message
# Pokemon Script Project - Krosk
# 18/07/07
# Modifier par Palbolsky
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
#
#----------------------------------------------------------------------------- 
class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  #
  #--------------------------------------------------------------------------
  def initialize
    # Redéfinition taille du cadre
    super(138, 33, 499, 71)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    self.opacity = 0
    @dummy = Sprite.new     
    @dummy.bitmap = RPG::Cache.picture($options[5])
    @dummy.visible = false
    @dummy.x = 15
    self.x = 9
    @dummy.z = 9997
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    @speed_defilement = $options[0]
    self.active = false
    self.index = -1
    $fontspecial = "Pokemon Emerald"     
    @color = 0
  end
 
  #--------------------------------------------------------------------------
  #
  #--------------------------------------------------------------------------

  def reset_window
    # Redéfinition
    if $game_temp.in_battle
      self.y = 159
      @dummy.y = 177
    else
      case $game_system.message_position
      when 0  # 上
        self.y = 6
        @dummy.y = 36
      when 1  # 中
        self.y = 166
        @dummy.y = 160
      when 2  # Redéfinition position du cadre inférieur
        self.y = 140
        @dummy.y = 158
      end
    end
    if $game_system.message_frame == 0
      #self.opacity = 255
      @dummy.opacity = 255
    else
      #self.opacity = 0
      @dummy.opacity = 0
    end
    self.back_opacity = 255 
    @color = 0
  end
  #--------------------------------------------------------------------------
  #
  #-------------------------------------------------------------------------- 
  def update
    super
    # フェードインの場合
    if @fade_in
      self.contents_opacity += 24
      if @input_number_window != nil
        @input_number_window.contents_opacity += 24
      end
      if self.contents_opacity == 255
        @fade_in = false
        if @speed_defilement != 0
          refresh
        end
      end
      return
    end
    # 数値入力中の場合
    if @input_number_window != nil
      @input_number_window.update
      # 決定
      if Input.trigger?(Input::C) or TACTILE.det_clique(14,270,228,420)
        $game_system.se_play($data_system.decision_se)
        $game_variables[$game_temp.num_input_variable_id] =
        @input_number_window.number
        $game_map.need_refresh = true
        # 数値入力ウィンドウを解放
        @input_number_window.dispose
        @input_number_window = nil
        terminate_message
      end
      return
    end
    # メッセージ表示中の場合
    if @contents_showing
      # 選択肢の表示中でなければポーズサインを表示
      if $game_temp.choice_max == 0       
        self.pause = true   
      end
      # キャンセル
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
          $game_system.se_play($data_system.cancel_se)
          $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
          terminate_message
        end
      end
      # 決定
      if Input.trigger?(Input::C) or TACTILE.det_clique(14,270,228,420)
         Audio.se_play("Audio/SE/Bip.ogg")
        if $game_temp.choice_max > 0
          $game_system.se_play($data_system.decision_se)
          $game_temp.choice_proc.call(self.index)
          end
          terminate_message       
        end
      return
    end
    # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合
    if @fade_out == false and $game_temp.message_text != nil     
      $game_variables[15] = 1
      $game_variables[14] = 2
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      if @speed_defilement == 0
        refresh
      end
      self.visible = true
      @dummy.visible = true     
      Graphics.frame_reset       
      self.contents_opacity = 0
      if @input_number_window != nil
        @input_number_window.contents_opacity = 0
      end
      @fade_in = true
      return
    end
    # 表示すべきメッセージがないが、ウィンドウが可視状態の場合
    if self.visible     
      @fade_out = true
      @dummy.opacity = 0
      #self.opacity -= 48
      if @dummy.opacity == 0 #self.opacity == 0
        self.visible = false
        @dummy.visible = false
        $dumtext.visible = false if $dumtext != nil
        $dumtext = nil
        @fade_out = false       
        $game_temp.message_window_showing = false       
        $game_variables[15] = 0 if not $game_variables[15] == 2
      end     
      return
    end
  end 
 
  #--------------------------------------------------------------------------
  #
  #--------------------------------------------------------------------------
  def refresh   
    self.contents.clear   
    self.contents.font.color = Color.new(82,82,90)
    self.contents.font.name = $fontspecial
    self.contents.font.size = 15   
    text_count = 0
    x = y = 0
    push = false
    @cursor_width = 0
    # 選択肢なら字下げを行う
    if $game_temp.choice_start == 0
      x = 8
    end
    # 表示待ちのメッセージがある場合
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      # 制御文字処理
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
        # MODIF
        text.gsub!(/\\[Pp]\[([0-9]+)\]/) { $string[$1.to_i] }
      end until 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 文字を取得 (文字が取得できなくなるまでループ)
      while ((c = text.slice!(/./m)) != nil)
        # \\ の場合
        if c == "\000"
          # 本来の文字に戻す
          c = "\\"
        end
        # \C[n] の場合
        if c == "\001"
          # 文字色を変更
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            #self.contents.font.color = text_color(color)
            @color = color
          end
          # 次の文字へ
          next
        end
        # \G の場合
        if c == "\002"
          # ゴールドウィンドウを作成
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end           
            @gold_window.opacity = 255
            @gold_window.back_opacity = 255
          end
          # 次の文字へ
          next
        end
        # 改行文字の場合
        if c == "\n"
          # 選択肢ならカーソルの幅を更新
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y に 1 を加算
          y += 1
          x = 0
          # 選択肢なら字下げを行う
          if y >= $game_temp.choice_start
            x = 8
          end
          # 次の文字へ
          next
        end
        # 文字を描画       
        draw_msg_text(4 + x, 16 * y, 12, 32, c, 0, @color)
        text_count += 1
        Input.update
        if Input.trigger?(Input::C) or TACTILE.det_clique(14,270,228,420)
            push = true
          end
        if text_count == @speed_defilement and @speed_defilement != 0 and push == false
          Graphics.update
          #$game_map.update
          $scene.update#spriteset.update
          text_count = 0
        end
        # x に描画した文字の幅を加算
        x += self.contents.text_size(c).width
      end
    end
    # 選択肢の場合
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # 数値入力の場合
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32   
    end
  end
  #--------------------------------------------------------------------------
  #
  #-------------------------------------------------------------------------- 
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(0, n * 32, 32, 32)
    else
      self.cursor_rect.empty
    end
  end
end

class Interpreter
  def setup_choices(parameters)
    # Redéfinition
    # choice_max に選択肢の項目数を設定
    $game_temp.choice_max = parameters[0].size
    # message_text に選択肢を設定
    for text in parameters[0]
      # Espaces supplémentaires
      $game_temp.message_text += "  " + text + "\n"
    end
    # キャンセルの場合の処理を設定
    $game_temp.choice_cancel_type = parameters[1]
    # コールバックを設定
    current_indent = @list[@index].indent
    $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }
  end
end



script windows_message_arrow:

Code:

#==============================================================================
# ■ Window_Message_Arrow
# Pokemon Script Project DS - Razbuz
# 22/02/10
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
#
#-----------------------------------------------------------------------------

class Window_Message
 
  alias initialize_old initialize
  alias update_old update
  alias refresh_old refresh
  alias terminate_message_old terminate_message
 
  def initialize
    @arrow = Sprite.new   
    @arrow.bitmap = RPG::Cache.picture("arrow")       
    @arrow.x = 245
    @arrow.y = 176
    @arrow.z = 10000
    @arrow.src_rect.set(0, 0, 32, 32)
    @arrow.visible = false
    @wait = 0
    initialize_old
  end
 
  def terminate_message
    @arrow.visible = false
    terminate_message_old
  end
 
  def refresh
    @arrow.visible = true
    refresh_old
  end
 
  def update
    @arrow.update
    x = 1
    y = -3
    w = 32
    @wait = (@wait + 1) % 33
    if @wait == 6
      @arrow.src_rect.set(x, y, w, w)
    end
    if @wait == 12
      @arrow.src_rect.set(x+w, y, w, w)
    end
    if @wait == 18
      @arrow.src_rect.set(x, y+w, w, w)
    end
    if @wait == 24
      @arrow.src_rect.set(x+w, y+w, w, w)
      @wait = 0
    end
    update_old
  end
end



merci d'avance!