Bonjour à tous! Alors voilà: je ne suis qu'un débutant (plutôt nul) dans le monde fascinant des scripts, mais j'ai décidé de me lancer et de créer un script permettant au joueur de personnaliser son héros au début du jeu. J'ai donc commencé, et voici mon code: (je sais, pour le moment, il n'y a que les cheveux et le personnage n'est pas enregistré à la fin, mais bon... en théorie on devrait pouvoir juste visualiser le personnage avec différentes coupes de cheveux)
Code:
class Scene_Chara_Custom
def main
array_commandes_principales = [ "Type de cheveux", "Couleur de cheveux"]
Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_commandes_principales.dispose @sprite_corps.dispose @sprite_cheveux.dispose @sprite_corps.bitmap.dispose if @sprite_corps.bitmap != nil @sprite_cheveux.bitmap.dispose if @sprite_cheveux.bitmap != nil end
def update @window_commandes_principales.update if @window_commandes_principales.active = true update_commandes elsif @type_cheveux = 1 select_type_cheveux elsif @couleur_cheveux = 1 select_couleur_cheveux end end
def update_commandes if Input.trigger? (Input::C) @window_commandes_principales.active = false case @window_commandes_principales.index when 0 @type_cheveux = 1 when 1 @couleur_cheveux = 1 end update end end
def select_couleur index = 0 @sprite_cheveux.bitmap = Cache.picture(@array_filename_cheveux[index]) if Input.trigger? (Input::RIGHT) if index<31 index +=5 end elsif Input.trigger? (Input::LEFT) if index>4 index -= 5 end elsif Input.trigger? (Input::C) or if Input.trigger? (Input::B) @window_commandes_principales.active = true @couleur_cheveux = 0 end end
def select_type_cheveux index = 0 index_couleur = index+4 @sprite_cheveux.bimap = Cache.picture(@array_filename_cheveux[index]) if Input.trigger? (Input::RIGHT) if index<index_couleur index += 1 end elsif Input.trigger? (Input::LEFT) if index>index_couleur - 4 index -= 1 end elsif Input.trigger?(Input::C) or if Input.trigger? (Input::B) @window_commandes_principales.active = true @type_cheveux = 0 end end end end end
Seulement voilà: déjà, j'ai besoin de mettre 5 end à la fin au lieu normalement de 3, sinon cela met "Syntax Error" pour la dernière ligne. Ensuite, j'arrive bien sur la fenêtre des commandes principales (où l'on choisit soit "type de cheveux" soit "couleur de cheveux"), on voit le chara tout nu sans cheveux. Mais lorsque je sélectionne "type de cheveux" ou "couleur de cheveux", une erreur apparait: "Script 'Window_Selectable' line X: SystemStackError occured. Stack level too deep" Et le plus beau dans tout ça, c'est que le X (qui normalement indique où ça coince) change quasiment à chaque fois!!!^^ (une fois ligne 97, une fois 98, une fois 220...) Je suis sur que l'erreur est toute bête (comme souvent) mais où est elle donc??? Sinon, je n'utilise aucun autre script (à part ceux de base, évidement). Je vous remercie donc d'avance!
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: Problème script Mar 16 Aoû 2011 - 12:41
Tout d'abord quelques remarques sur ton code en lui même. Pourquoi tu n'utilises pas l'héritage ? Ce serait beaucoup mieux, surtout pour ta scene !
Bref, ton erreur c'est que la pile ( stack ) est pleine. Donc ça dégage une erreur "Stack level too deep". C'est généralement un problème de fonctions imbriquées les unes dans les autres qui s'accumulent, qui s'accumule, encore et encore.
Wurzag
Poulet carnivore Lv.2
Age : 30 Inscrit le : 21/03/2011 Messages : 23
Sujet: Re: Problème script Mar 16 Aoû 2011 - 17:03
Bon, voilà: vu que je ne sais pas trop comment utiliser l'héritage, je ne l'ai utilisé que pour réduire "main" (en la séparant en "start" et en "terminate"). Mais sinon, je pense que cette accumulation de fonctions doit être due à une quelconque boucle qui n'est pas arrêtée (d'où le nombre excessif de "end" à la fin), mais le problème, c'est que je ne vois pas où... (aucune boucle dans le code...)
Code:
class Scene_Chara_Custom<Scene_Base
def start
array_commandes_principales = [ "Type de cheveux", "Couleur de cheveux"]
def terminate @window_commandes_principales.dispose @sprite_corps.dispose @sprite_cheveux.dispose @sprite_corps.bitmap.dispose if @sprite_corps.bitmap != nil @sprite_cheveux.bitmap.dispose if @sprite_cheveux.bitmap != nil end
def update @window_commandes_principales.update if @window_commandes_principales.active = true update_commandes elsif @type_cheveux = 1 select_type_cheveux elsif @couleur_cheveux = 1 select_couleur_cheveux end end
def update_commandes if Input.trigger? (Input::C) @window_commandes_principales.active = false case @window_commandes_principales.index when 0 @type_cheveux = 1 when 1 @couleur_cheveux = 1 end update end end
def select_couleur index = 0 @sprite_cheveux.bitmap = Cache.picture(@array_filename_cheveux[index]) if Input.trigger? (Input::RIGHT) if index<31 index +=5 end
elsif Input.trigger? (Input::LEFT) if index >4 index = index-5 end elsif Input.trigger? (Input::C) or if Input.trigger? (Input::B) @window_commandes_principales.active = true @couleur_cheveux = 0 end end
def select_type_cheveux index = 0 index_couleur = index+4 @sprite_cheveux.bimap = Cache.picture(@array_filename_cheveux[index]) if Input.trigger? (Input::RIGHT) if index <index_couleur+1 index += 1 end
elsif Input.trigger? (Input::LEFT) if index>index_couleur-4 index = index-1 end elsif Input.trigger?(Input::C) or if Input.trigger? (Input::B) @window_commandes_principales.active = true @type_cheveux = 0 end end end end end