Partagez
Aller en bas
PumpkinG
PumpkinG
Membre

Nombre de messages : 8
Distinction : aucune
Date d'inscription : 12/08/2015

[Error Window_Base] Disposed Window Empty [Error Window_Base] Disposed Window

le Mar 18 Aoû 2015 - 0:35
Hello à tous !
Alors en ce moment je crée un script de journal qui recense toutes les rencontres effectuées au cours d'un jeu. Je suis confronté cependant à un petit problème. Du menu je lance une nouvelle scène, le codex (une liste des différents personnages), qui lui peut afficher la description de chaque personnage en le selectionnant (ce qui ouvre une nouvelle fenetre).

Lorsque j'arrive à ce script (qui ferme la fenêtre de description et revient à la liste des personnages), tout se passe bien.
Spoiler:

def close_window_codex
     @codex_ouvert = false;
     SceneManager.call(Scene_CodexList)
end

Cette methode se trouve dans Scene_CodexList et se lance lorsque l'on ferme la window de description.

Seulement, après avoir avoireffectué cette action, si je retourne sur le menu, ça provoque une erreur :[Error Window_Base] Disposed Window Prob210

J'imagine bien que ça provient de SceneManager.call(Scene_CodexList), mais je ne saurais expliquer pourquoi.
Merci de votre aide ! Very Happy

Les scripts en entiers :

Menu_Codex :
Spoiler:

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_MenuBase
 
 alias ccm       create_command_window
 def create_command_window
   ccm() #call the original method
   @command_window.set_handler(:codex,      method(:codex))
 end
 
 def codex()
   #@window = Window_Codex.new
   #@window.change_text("Eliphas the Inheritor.")
   SceneManager.call(Scene_CodexList)
 end
 
end


#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
#  This command window appears on the menu screen.
#==============================================================================

class Window_MenuCommand < Window_Command
 #--------------------------------------------------------------------------
 # * For Adding Original Commands
 #--------------------------------------------------------------------------
 alias aoc       add_original_commands
 def add_original_commands
   aoc()
   add_command("Codex", :codex);
   #Rajouter true ou false en 3ème argument pour enable le menu
 end
end


Scene_CodexList :
Spoiler:
class Window_CommandMine < Window_Command
 def make_command_list
   
   eliphas_contenu = "A remplir plus tard"
   $codex = [{'png'=>'eliphas','nom'=>'Eliphas','symbole'=>:eliphas,'contenu'=> eliphas_contenu},{'png'=>'failsnake','nom'=>'Failsnake','symbole'=>:failsnake},{'png'=>'shnooze','nom'=>'Shnooze','symbole'=>:shnooze},{'png'=>'darkminster','nom'=>'Darkminster','symbole'=>:darkminster}] unless defined? $codex
   
   # Trie le tableau par noms
   $codex = $codex.sort do |a, b|
     a['nom'] <=> b['nom']   # Tri sur le second élément
   end
   
   $codex.each do |perso|
     add_command(perso['nom'], :window_codex)
   end
   
 end
end

class Scene_CodexList < Scene_MenuBase

 def start()
       super
       create_background
       create_windows
       @cursor = 0
       @contenu_ouvert = false;
       @bit = Sprite.new
       change_picture()
 end
     
 def create_windows
       @cmd = Window_CommandMine.new(0,0)
       
     # assignation des méthodes à chaque élément de la liste
       @cmd.set_handler(:window_codex, method(:window_codex))
       
     end
 def change_picture
   @bit.bitmap = Cache.picture($codex[@cursor]['png'])
 end  
 
 def window_codex
   @window_codex = Window_Codex.new(@cursor)
   @codex_ouvert = true
 end
 
 def update
   super
   if Input.trigger?(:B)
     unless @codex_ouvert
       SceneManager.return
       RPG::SE.new("Cancel2", 100, 100).play
     else
       close_window_codex
     end
   end
   
   def close_window_codex
     @codex_ouvert = false;
     SceneManager.call(Scene_CodexList)
   end
   
   if Input.trigger?(:DOWN) && !@codex_ouvert
     unless (@cursor == ($codex.count - 1))
       @cursor += 1
       change_picture()
     else
       @cursor = 0
       change_picture()
     end
   end
   
   if Input.trigger?(:UP) && !@codex_ouvert
     unless (@cursor == 0)
       @cursor -= 1
       change_picture()
     else
       @cursor = $codex.count - 1
       change_picture()
     end
   end

 end
end

Window_Codex :
Spoiler:
class Window_Codex < Window_Base
 def initialize(cursor)
   
   super(160,0,385,415)
   @cursor = cursor
   change_text ($codex[@cursor]['contenu'])
 end
 
 def change_text (text)
   #return unless text.is_a?(String)
   #contents.clear
   draw_text(text,0,0,300,300)

 end
 
 #--------------------------------------------------------------------------
 # * Draw Text
 #     args : Same as Bitmap#draw_text.
 #--------------------------------------------------------------------------
 def draw_text(text,x,y, text_width, text_height, alignment = 0)
   contents.draw_text(x,y, text_width, text_height,text, alignment)
 end
 
 
end
PumpkinG
PumpkinG
Membre

Nombre de messages : 8
Distinction : aucune
Date d'inscription : 12/08/2015

[Error Window_Base] Disposed Window Empty Re: [Error Window_Base] Disposed Window

le Mar 18 Aoû 2015 - 0:41
A la seconde où j'ai posté mon message, j'ai eu un déclic.
Il suffisait de remplacer le SceneManager.return par un call du Scene_Menu...
Logiquement. Il essayait de charger une fenêtre supprimée, donc bon.

Désolé du dérangement.
vincent26
vincent26
Membre

Nombre de messages : 766
Age : 24
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

[Error Window_Base] Disposed Window Empty Re: [Error Window_Base] Disposed Window

le Mar 18 Aoû 2015 - 1:09
ton script est bizarre car tu utilise trop de call

def close_window_codex
@codex_ouvert = false;
SceneManager.call(Scene_CodexList)
end

met plutôt
def close_window_codex
@codex_ouvert = false;
@window_codex.close
end

et

if Input.trigger?(:B)
unless @codex_ouvert
SceneManager.return
RPG::SE.new("Cancel2", 100, 100).play
else

if Input.trigger?(:B)
unless @codex_ouvert
return_scene
RPG::SE.new("Cancel2", 100, 100).play
else
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum