IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Error #1502: (strict exécuté en 15 secondes) sur un while


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Par défaut Error #1502: (strict exécuté en 15 secondes) sur un while
    Bonjour,
    Je débute dans la création de classe, et je suis confronté à un probléme.
    J'ai une classe main, qui créé une instance de la classe Introduction... Pour l'insntant, cette classe introduction place sur la scéne un clip quelconque, mais on pourra imaginer une animation d'une durée connu...
    La classe introduction à une méthode qui dis si l'animation est finie.

    Ce que je veux faire, c'est une boucle while dans ma class Main qui tourne tant que l'animation de Introduction n'est pas finie, et qui removeChild lorsqu'elle est finie...

    Voici mon code:

    class Main.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package monpack{
    	import flash.display.Sprite;
    	import flash.net.*;
     
    	public class Main extends Sprite{
    	//instance de ma classe Introduction
    	public var intro:Introduction = new Introduction();
     
               //j'ajoute et j'attend la fin de l'animation
    		public function Main(){
    			addChild(intro);
    			waitEndIntro();
    		}
    		private function waitEndIntro(){
                            //c'est ici que ça plante!
    			while(intro.getTruth()){
    				trace(intro.getTruth());
    		}
    			removeChild(intro);
    		}
    	}
    }
    class Introduction.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    package monpack{
    	import flash.net.*;
    	import flash.display.Sprite;
    	import flash.events.*;
    	import flash.utils.Timer;
     
    	public class Introduction extends Sprite{
     
                          //ça c'est le clip de mon animation
    		public var monAnim:Animation57i = new Animation57i();
    		public var truth:Boolean = true;
    		private var myTimer:Timer = new Timer(1000,1);
     
    		public function Introduction(){
    				trace("hello");
    				addChild(monAnim);
    				myTimer.addEventListener(TimerEvent.TIMER, changeTruth);
    				myTimer.start();
    			}
     
    			public function getTruth()
    			{
    				return truth;
    			}
     
    			function changeTruth (evt:TimerEvent) {
    				truth = false;
    			}
    		}
    }
    et le beau message d'erreur:
    Error: Error #1502: La durée d'exécution d'un script excède le délai par défaut (15 secondes).
    at monpack::Introduction/getTruth()
    at monpack::Main/waitEndIntro()
    at monpack::Main()
    Je me dis que la boucle whilte tourne peut-être trop, et que du coup le script mouline dur... Existe-t'il comme en Java un moyen de stopper un processus (ou pseudo-thread) dans un style de try{this.sleep}catch{}... comme AS3 à rajouter ce fameux try catch, j'aurais espéré que ça puisse servir à ça, mais wait et sleep ne retourne rien sur l'aide flash...

    Quelqu'un a t'il un élément de réponse? une idée? Perso, je patoge!

    Merci de votre aide!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Par défaut
    Tout d'abord, je ne connais pas de manière de détecter si tu plantes tel que this.sleep. Mais tu peux intégrer un getTimer() dans ton while et prévoir un échapement quand tu dépasses un certain temps.

    Par ailleurs, si tu as ce message d'erreur, c'est en général que tu as créé une boucle sans fin.

    Ton problème est un problème de conception. En effet, ta fonction getTruth renvoie si l'animation est finie ou non. Mais on est bien d'accord qu'elle doit mesurer cet état à chaque frame.
    Or un script s'exécute en entier à chaque frame. Ce qui signifie que ton while, dès la première frame, attend la fin de l'animation qui du coup ne peut pas passer à la seconde frame puisque le script du while n'est pas terminé... et ne se terminera jamais. Tu as créé une boucle sans fin.

    La solution est de mesurer à chaque frame si l'animation est terminée ou non. Ce qu'il te faut c'est un test asynchrone. Pas une boucle d'attente. Il faut donc que tu intègres ton test dans une fonction appelée par l'évènement onEnterFrame. Ainsi, c'est bien à chaque frame que tu effectueras un seul test de fin d'animation, déclenchant un échappement ou non.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2011, 13h13
  2. Réponses: 6
    Dernier message: 09/11/2005, 17h29
  3. Exécuter un fichier .BAT sur une machine distante
    Par ruff15 dans le forum Windows
    Réponses: 4
    Dernier message: 14/09/2005, 11h44
  4. exécuter requête au clic sur valider
    Par rangernoir dans le forum Access
    Réponses: 6
    Dernier message: 09/09/2005, 15h01
  5. [VB.NET] Exécuter une fonction VB sur un Datagrid
    Par MiJack dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/09/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo