Sujet n°13545
Posté par Zohran le 26 Jan - 16:35 (2014)
Titre : [En cours de résolution]Mon script ne fonctionne pas
Bonjour, voilà, je suis en train de terminer mon script de bulle BW pour PSP5G, j'ai créé une nouvelle classe, "semblable" à window_message.
Je vous explique, dans Scene_Map, j'ai mis une condition selon un interrupteur qui fait que soit @message_window = Window_Message.new, soit l'interrupteur des bulles est activé et la: @message_window = Bulle_Bw.new.

Jusque là, tout va bien, mais quand je lance le jeu...bah rien ne change, les dialogues sont toujours les mêmes o_o

Voici mon script:
Code:
module POKEMON_S
  VARIABLE_BULLE_ID_EVENT = 19
  INTERRUPTEUR_BULLE = 3
end

class Bulle_Bw < Window_Selectable
 
  def initialize
    #Fenêtre du texte
    super(138, 33, 499, 71)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.x = 9
    self.z = 9998
    self.opacity = 0
    self.active = false
    self.index = -1
   
    #Options générales
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    @speed_defilement = $SPEED_MSG
    $fontspecial = "Pokemon Emerald"
   
    #Bulle BW===========================================
    @dummy = Sprite.new
    @dummy.bitmap = RPG::Cache.picture("Messages/Bulle")
    @dummy.z = 9997
    @dummy.visible = false
   
    @fleche = Sprite.new
    @fleche.z = 9998
    @fleche.visible = false
   
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96
      $game_system.message_position = 0
    else
      $game_system.message_position = 2
    end
   
    if $game_system.message_position == 0
      @dummy.x = 15
      @dummy.y = 15
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height)
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x
      else
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width
      end
    else
      @dummy.x = 15
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width
      else
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x
      end
      @fleche.y = @dummy.y - @fleche.bitmap.height + 2
    end
    #====================================================
   
  end
 
  def reset_window
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96
      $game_system.message_position = 0
    else
      $game_system.message_position = 2
    end
   
    if $game_system.message_position == 0
      @dummy.x = 15
      @dummy.y = 15
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height)
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x
      else
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width
      end
    else
      @dummy.x = 15
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width
      else
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x
        @fleche.y = @dummy.y - @fleche.bitmap.height + 2
      end
    end
   
    if $game_system.message_frame == 0 
      @dummy.opacity = 255
    else
      @dummy.opacity = 0
    end
    self.back_opacity = 255
  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)         
        $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)       
         Audio.se_play("Audio/SE/Message")
        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
        $game_system.message_position = 2
        @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(0,0,0)
    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)
          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_text(4 + x, 16 * y, 12, 32, c)
        text_count += 1
        Input.update
        if Input.trigger?(Input::C)           
          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
 
end

Posté par Nuri Yuri le 26 Jan - 16:41 (2014)
Parce que MessageWindow est initialisé lorsque Scene_Map est initialisé donc avec ta méthode tu ne peux pas changer de méthode d'affichage en plein milieu du fonctionnement d'un évènement.

Posté par Zohran le 26 Jan - 16:42 (2014)
Ah d'accord, merci Yuri, comment je peux contourner le problème alors?

Posté par Nuri Yuri le 26 Jan - 16:56 (2014)
-Programmer WindowMessage de manière dynamique
Ou
-Capter la modification du switch qui change l'affichage pour initialiser la variable @message_window à la bonne valeur.

Posté par Zohran le 26 Jan - 17:03 (2014)
D'accord Yuri. La première solution ne me semble pas être la meilleure.

Pour la seconde, il me vient une idée, peut-être tout simplement dès l'initialisation de window_message, dans le script même, mettre les conditions d'affichage selon l'activation de l'interrupteur. J'espère que ça marchera. Merci des éclaircissements !

Posté par Nuri Yuri le 26 Jan - 17:07 (2014)
Ce que tu proposes c'est la première solution xD

Posté par Mack le 26 Jan - 17:09 (2014)
Pourquoi ne pas initialiser les deux en même temps, mais switcher de l'une à l'autre en fonction du besoin ?
( Sinon, tout faire dans la même classe mais bon xD )

Posté par Zohran le 26 Jan - 17:15 (2014)
Yuri a écrit:
Ce que tu proposes c'est la première solution xD

XD, j'avoue Falco Lombardi

Mack a écrit:
Pourquoi ne pas initialiser les deux en même temps, mais switcher de l'une à l'autre en fonction du besoin ?
( Sinon, tout faire dans la même classe mais bon xD )

Je n'y avais pas pensé Yeux motorisés Mais on ne risque pas de retomber sur le même problème?

Posté par Mack le 26 Jan - 17:18 (2014)
Bah, non.
En gros, en début de script tu initialise tes deux fenêtres, et tu les caches toute les deux.
Ensuite, dans l'update de la Scene_Map, tu updates seulement l'une des deux fenêtres.

Et normalement, seulement une des deux fenêtres devrait apparaitre.
( Enfin, si tes deux fenêtres sont dans le même style que le Window_Message de base. )

J'ai pas essayer, donc je dis peut être des conneries, mais ça me semble être une solution viable ^^.

Posté par Nuri Yuri le 26 Jan - 17:25 (2014)
Cette solution fonctionne aussi Gros matou qui ronronne
J'y ai pas pensé x)

Posté par Zohran le 26 Jan - 17:29 (2014)
Bah vous aller être déçu, la solution de Mack ne fonctionne pas... Parce que le soucis, c'est que si j'initialise Window_Message et Bulle_Bw en même temps, ça crée un bug parce que au départ si la variable contenant l'ID de l'event vaut 0, bah lorsque je renvoie au coordonnée de l'event (qui est de l'id 0) dans mon script, ça génère un bug ^^'

Posté par og_loc-TATOO le 26 Jan - 17:30 (2014)
T'as qu'à changer d'(idée) 42

*Ok, je sors*

EDIT Zohran : Ouais, j'ai l'idée de te taper Ohmagad Madame Palb' ! Ca fait du bien rien que d'y penser ! Soumission

Posté par Zohran le 26 Jan - 17:36 (2014)
Toujours aussi spirituel og Ohmagad T'as vu j'ai édité ton message 42

Sinon, aucune idée Yuri ou Mack?

Posté par Mack le 26 Jan - 17:36 (2014)
What ? xD

Dans ta Scene_Map t'as un truc comme ça :
Code:
   @message_window = Window_Message.new
    @bulles_window = Window_Bulles.new


Et dans la def update :

Code:
if ($game_variables[1]==true)
      @message_window.update
    else
      @bulles_window.update
    end


Je comprend pas ton problème d'id en faite xD.

Posté par Zohran le 26 Jan - 17:39 (2014)
Mack a écrit:
What ? xD

Dans ta Scene_Map t'as un truc comme ça :
Code:
   @message_window = Window_Message.new
    @bulles_window = Window_Bulles.new


Et dans la def update :

Code:
if ($game_variables[1]==true)
      @message_window.update
    else
      @bulles_window.update
    end


Oui, mais dans def update j'ai mis en condition supplémentaire l'activation de l'interrupteur aussi.

Mais ça génère un bug comme je te l'ai dit, puisque si au début ma variable contenant l'ID vaut 0, lorsque que l'on crée l'objet Bulle_Bw, il utilise les coordonnées de l'event qui a l'ID de la variable

Pourquoi t'as mis des parenthèses o_o???

Posté par Mack le 26 Jan - 17:45 (2014)
( Les parenthèses c'est l'habitude du Java t'es obligé d'en mettre. Du coup j'ai pris cette habitude ^^ )

Ah oui, je vois ton problème.
Là, c'est plus parce que t'as mal pensé ton système.
Toi tu veux que le truc se place quand il se créer, hors forcement ça va tout planter si tu le créer dès le début.
Mais le créer en cours de jeu est pas une bonne idée, ça consommerais des ressources à chaque fois que tu ré-affiches un message.

En gros, dans ta bulle il va te falloir séparer la création pur et dur de ta fenêtre, et la partie placement/taille/autre.

A vue d'oeil, tu devrais couper ta def initialize en deux après la ligne 35, faire un truc du genre quoi :
Code:
module POKEMON_S 
  VARIABLE_BULLE_ID_EVENT = 19 
  INTERRUPTEUR_BULLE = 3 
end 
 
class Bulle_Bw < Window_Selectable 
   
  def initialize 
    #Fenêtre du texte 
    super(138, 33, 499, 71) 
    self.contents = Bitmap.new(width - 32, height - 32) 
    self.visible = false 
    self.x = 9 
    self.z = 9998 
    self.opacity = 0 
    self.active = false 
    self.index = -1 
     
    #Options générales 
    @fade_in = false   
    @fade_out = false 
    @contents_showing = false 
    @cursor_width = 0 
    @speed_defilement = $SPEED_MSG 
    $fontspecial = "Pokemon Emerald" 
     
    #Bulle BW=========================================== 
    @dummy = Sprite.new 
    @dummy.bitmap = RPG::Cache.picture("Messages/Bulle") 
    @dummy.z = 9997 
    @dummy.visible = false 
     
    @fleche = Sprite.new 
    @fleche.z = 9998 
    @fleche.visible = false 
  end

  def re_initialize
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96 
      $game_system.message_position = 0 
    else 
      $game_system.message_position = 2 
    end 
     
    if $game_system.message_position == 0 
      @dummy.x = 15 
      @dummy.y = 15 
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2 
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height) 
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x 
      else 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width 
      end 
    else 
      @dummy.x = 15 
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2 
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width 
      else 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x 
      end 
      @fleche.y = @dummy.y - @fleche.bitmap.height + 2   
    end 
    #==================================================== 
     
  end 
   
  def reset_window 
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96 
      $game_system.message_position = 0 
    else 
      $game_system.message_position = 2 
    end 
     
    if $game_system.message_position == 0 
      @dummy.x = 15 
      @dummy.y = 15 
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2 
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height) 
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x 
      else 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width 
      end 
    else 
      @dummy.x = 15 
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2 
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width 
      else 
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG") 
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x 
        @fleche.y = @dummy.y - @fleche.bitmap.height + 2 
      end 
    end 
     
    if $game_system.message_frame == 0   
      @dummy.opacity = 255 
    else 
      @dummy.opacity = 0 
    end 
    self.back_opacity = 255 
  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)           
        $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)         
         Audio.se_play("Audio/SE/Message") 
        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 
        $game_system.message_position = 2 
        @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(0,0,0) 
    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) 
          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_text(4 + x, 16 * y, 12, 32, c) 
        text_count += 1 
        Input.update 
        if Input.trigger?(Input::C)             
          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 
   
end 


Et donc quand tu vas afficher t'as bulle, tu auras juste à appeler la méthode re_initialize.


( Encore une fois, c'est du a vue d'oeil donc bon xD )

EDIT : En faite, suffit juste de supprimer la nouvelle def que j'ai faite, et d'appeler t'as def reset_window ^^.

Posté par Zohran le 26 Jan - 17:51 (2014)
D'accord, du coup, j'ai fait un copié collé de ce que tu as fait et dans update de Scene_Map, j'ai mis ça:
Code:
if $game_switches[POKEMON_S::INTERRUPTEUR_BULLE] == true and $game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT] != 0
      @bulle.re_initialize
      @bulle.update
    else
      @message_window.update 
    end


J'ai testé le jeu, mais on revient au problème de départ, l'affichage est celui des dialogues normaux mdr Rébellion

Posté par Mack le 26 Jan - 17:53 (2014)
Bah, c'est tout simplement que soit tu actives pas ton interrupteur, soit tu donnes pas de valeur à ta variables ^^".
( Ou alors que tu te plantes de Scene_Map, il me semble qu'il y en a plusieurs dans le SK ... )

Pour vérifier rajoute un p "TEST" entre else et @message_window.update.

Posté par Zohran le 26 Jan - 18:33 (2014)
Mack a écrit:
Bah, c'est tout simplement que soit tu actives pas ton interrupteur, soit tu donnes pas de valeur à ta variables ^^".
( Ou alors que tu te plantes de Scene_Map, il me semble qu'il y en a plusieurs dans le SK ... )

Pour vérifier rajoute un p "TEST" entre else et @message_window.update.

Oui c'est ça ^^, c'est vrai, j'avais oublié que la méthode update avait été rééditée Bouche extensible Relou PSP Falco Lombardi
Impeccable, je vais ouvoir continuer à travailler dessus du coup ^^
_____________________________________________________________________________________________________________________________

J'ai un nouveau problème, maintenant, dès que j'ouvre la boite de dialogue, le message s'affiche et le dummy aussi, mais malgré mes modifications de coordonnées selon $game_system.message_position, le dummy reste en bas.

Second bug, dès que je clique sur entrée pour finir l'affichage du message, bah rien ne s'efface et en plus on ne sort pas de la scene puisque on peut toujours cliquer sur entrée mais on ne peut pas bouger Bouche extensible

Je vous donne le script tel qu'il est maintenant, si vous avez une idée, dites moi:
Code:
module POKEMON_S   
  VARIABLE_BULLE_ID_EVENT = 19   
  INTERRUPTEUR_BULLE = 3   
end   
   
class Bulle_Bw < Window_Selectable   
     
  def initialize   
    #Fenêtre du texte   
    super(138, 33, 499, 71)   
    self.contents = Bitmap.new(width - 32, height - 32)   
    self.visible = false   
    self.x = 9   
    self.z = 9998   
    self.opacity = 0   
    self.active = false   
    self.index = -1   
       
    #Options générales   
    @fade_in = false     
    @fade_out = false   
    @contents_showing = false   
    @cursor_width = 0   
    @speed_defilement = $SPEED_MSG   
    $fontspecial = "Pokemon Emerald"   
       
    #Bulle BW===========================================   
    @dummy = Sprite.new   
    @dummy.bitmap = RPG::Cache.picture("Messages/Bulle")   
    @dummy.z = 9997   
    @dummy.visible = false   
       
    @fleche = Sprite.new   
    @fleche.z = 9998   
    @fleche.visible = false   
  end 
 
  def re_initialize 
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96   
      $game_system.message_position = 0   
    else   
      $game_system.message_position = 2   
    end   
       
    if $game_system.message_position == 0   
      @dummy.x = 15   
      @dummy.y = 15   
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2   
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width   
      end   
    else   
      @dummy.x = 15   
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2   
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x   
      end   
      @fleche.y = @dummy.y - @fleche.bitmap.height + 2     
    end   
    #====================================================   
       
  end   
     
  def reset_window   
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96   
      $game_system.message_position = 0   
    else   
      $game_system.message_position = 2   
    end   
       
    if $game_system.message_position == 0   
      @dummy.x = 15   
      @dummy.y = 15   
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2   
      @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width   
      end   
    else   
      @dummy.x = 15   
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2   
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x - @fleche.bitmap.width   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x   
        @fleche.y = @dummy.y - @fleche.bitmap.height + 2   
      end   
    end   
       
    if $game_system.message_frame == 0     
      @dummy.opacity = 255   
    else   
      @dummy.opacity = 0   
    end   
    self.back_opacity = 255   
  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)             
        $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)           
         Audio.se_play("Audio/SE/Message")   
        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
      @fleche.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   
        $game_system.message_position = 2   
        @fade_out = false           
        $game_temp.message_window_showing = false           
        $game_variables[15] = 0 if not $game_variables[15] == 2     
      end         
      return   
    end   
  end   
     
  def terminate_message
    #@arrow.visible = false
    #terminate_message_old
  end
 
  def refresh   
    self.contents.clear   
    self.contents.font.color = Color.new(0,0,0)   
    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)   
          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_text(4 + x, 16 * y, 12, 32, c)   
        text_count += 1   
        Input.update   
        if Input.trigger?(Input::C)               
          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   
 
end

Posté par Mack le 26 Jan - 18:47 (2014)
Le fait que ça ferme pas, c'est surement parce que la def terminate est vide ^^.

Pour l'autre bug, dans le script à un moment t'as :
$game_system.message_position = 2

Et ça ça force l'affichage en bas ;D.

Posté par Zohran le 26 Jan - 18:56 (2014)
Mon problème, c'est que dès que je remets le def terminate par défaut de Window_Message, ça génère un bug.

Par contre, même en supprimant $game_system.message_position = 2 dans mes conditions, ça ne change strictement rien o_o

Posté par Mack le 26 Jan - 20:06 (2014)
Donc le premier problème est reglé, il reste que la position ?

En faite, c'est assez simple, à un moment tu fais ça :
Code:
if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 15 + 96 

Hors, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y est compté en case, et pas en pixel.
Genre, ton évent est sur la case 24 en x, mais ses coordonnées en x sont 24, et pas 24*32.

Pareil pour les Y, en gros t'as juste à diviser tes conditions par 16 et ça devrait marcher.

Posté par Zohran le 26 Jan - 21:03 (2014)
Effectivement, ce que tu dis est logique, mais reste un problème malheureusement... j'y avais pas pensé, si on fait les coordonnées par case * 16, on obtient pas les coordonnées par rapport à l'ECRAN Bouche extensible

Donc du coup, bah je ne sais toujours pas comment faire...

Il faudrait récupérer les coordonnées du sprite du character de l'event pour que cela fonctionne!

Posté par Mack le 26 Jan - 21:07 (2014)
Gnée ?
Non, si tu fais les coordonnées * 16 tu aurais les coordonnées * 16, point.
Pas les coordonnées relatives à l'écran xD.

Code:
if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y > 7

Ça marche pas ?
( Enfin, faut aussi penser à changer le reste. )

Posté par Zohran le 26 Jan - 21:09 (2014)
Bah attend, je te montre ce que j'ai mis:
Code:
module POKEMON_S   
  VARIABLE_BULLE_ID_EVENT = 19   
  INTERRUPTEUR_BULLE = 3   
end   
   
class Bulle_Bw < Window_Selectable   
     
  def initialize   
    #Fenêtre du texte   
    super(138, 33, 499, 71)   
    self.contents = Bitmap.new(width - 32, height - 32)   
    self.visible = false   
    self.x = 10   
    self.z = 9998   
    self.opacity = 0   
    self.active = false   
    self.index = -1   
   
    #Options générales   
    @fade_in = false     
    @fade_out = false   
    @contents_showing = false   
    @cursor_width = 0   
    @speed_defilement = $SPEED_MSG   
    $fontspecial = "Pokemon Emerald"   
       
    #Bulle BW===========================================   
    @dummy = Sprite.new   
    @dummy.bitmap = RPG::Cache.picture("Messages/Bulle")   
    @dummy.z = 9997   
    @dummy.visible = false   
       
    @fleche = Sprite.new   
    @fleche.z = 9998   
    @fleche.visible = false
  end 
 
  def re_initialize 
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 > 15 + 96     
      $game_system.message_position = 0
      @dummy.x = 15   
      @dummy.y = 15   
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2
      self.y = @dummy.y + 6 - 24
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 - @fleche.bitmap.width   
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      end   
    else   
      $game_system.message_position = 2 
      @dummy.x = 15   
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2
      self.y = @dummy.y + 6 - 24
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 - @fleche.bitmap.width
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16   
        @fleche.y = @dummy.y - @fleche.bitmap.height + 2   
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      end   
    end   
       
    if $game_system.message_frame == 0     
      @dummy.opacity = 255   
    else   
      @dummy.opacity = 0   
    end   
    self.back_opacity = 255   
    #====================================================   
       
  end   
     
  def reset_window   
    if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 > 15 + 96       
      $game_system.message_position = 0
      @dummy.x = 15   
      @dummy.y = 15   
      @fleche.y = @dummy.y + @dummy.bitmap.height - 2   
      self.y = @dummy.y + 6 - 24
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16   
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche HG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 - @fleche.bitmap.width 
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      end   
    else   
      $game_system.message_position = 2 
      @dummy.x = 15   
      @dummy.y = 15 + 192 - @dummy.bitmap.height - 2   
      self.y = @dummy.y + 6 - 24
      if $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 < 15 + 128   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BD")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16 - @fleche.bitmap.width
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      else   
        @fleche.bitmap = RPG::Cache.picture("Messages/Flêche BG")   
        @fleche.x = $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].x * 16   
        @fleche.y = @dummy.y - @fleche.bitmap.height + 2   
        @fleche.bitmap.rect.set(0, $game_map.events[$game_variables[POKEMON_S::VARIABLE_BULLE_ID_EVENT]].y * 16 - 96, @fleche.bitmap.width, @fleche.bitmap.height)   
      end   
    end   
       
    if $game_system.message_frame == 0     
      @dummy.opacity = 255   
    else   
      @dummy.opacity = 0   
    end   
    self.back_opacity = 255   
  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)             
        $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)           
         Audio.se_play("Audio/SE/Message")   
        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
      @fleche.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   
        $game_system.message_position = 2   
        @fade_out = false           
        $game_temp.message_window_showing = false           
        $game_variables[15] = 0 if not $game_variables[15] == 2     
      end         
      return   
    end   
  end   
     
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    # 表示中フラグをクリア
    @contents_showing = false
    # メッセージ コールバックを呼ぶ
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    # 文章、選択肢、数値入力に関する変数をクリア
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    # ゴールドウィンドウを開放
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
  end
 
  def refresh   
    self.contents.clear   
    self.contents.font.color = Color.new(0,0,0)   
    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)   
          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_text_black(4 + x, 16 * y, 12, 32, c)   
        text_count += 1   
        Input.update   
        if Input.trigger?(Input::C)               
          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   
 
end


J'ai multiplié par 16 les coordonnées cases de l'event (ce qui revient au même je pense?)

Posté par Mack le 26 Jan - 21:12 (2014)
Ouaip, mais oublie ce que j'ai dis, j'ai mélangé mes pinceaux xD.


Essaie avec screen_x et screen_y au lieu de x et y, c'est les coordonnées relatives à l'écran me semble.
( Et du coup ça devrait mieux marcher xD )