Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2008, 11h52   #1
Membre du Club
 
Étudiant
Inscription : janvier 2007
Messages : 76
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 76
Points : 53
Points : 53
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 :
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 :
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:
Citation:
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!
boadog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 13h24   #2
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
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.
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h18.


 
 
 
 
Partenaires

Hébergement Web