Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash
Flash Forum d'entraide sur la technologie Flash (Cours, FAQs, Sources)
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 14/06/2007, 10h04   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Par défaut Animation rejouée malgré stop()

Bonjour

Est-il possible qu'une animation passe outre l'instruction stop et continue à rejouer en boucle?

J'ai une animation qui appellle un script PHP sur le load afin de charger des variables permettant l'affichage d'images aléatoires, associées à une légende et à un lien externe. Il y a un stop() à la fin de mon actionscript (dernière image du calque concerné sur la scène principale) et un autre sur un autre calque, au même niveau du scénario. Pourtant, si je mets un trace() dans la fonction onLoad, je constate que je me retrouve dans une boucle infinie... Comme si l'actionscript continuait à appeller mon script PHP à l'infini.

Code :
1
2
3
	ref1.onEnterFrame = function (){
		trace("On est dans ref1");
		stop();
C'est ce trace() qui s'applique à l'infini.

Pas très clair tout ça. mais difficile d'expliquer mieux. Voici le code actionscript concerné, sur lequel je me casse la tête depuis un moment:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
_quality = "BEST";
 
//function random
lv=new LoadVars();
lv.onLoad = function() {
 
	createEmptyMovieClip("photo",0);
	photo.loadMovie("../img_ref/"+lv.id1+".jpg");
	//trace("../img_ref/"+lv.id1+".jpg");
	photo._x = 450;
	photo._y = 365;
 
	//trace(lv.leg1);
 
	//create a blank text box and set its parameters
	_root.createTextField("theTextBox",400,450,490,150,20);
	theTextBox.background=false;
	theTextBox.border=false;
	theTextBox.backgroundColor=0xFFFFFF;//white
	theTextBox.borderColor=0x000000;//black
	theTextBox.multiline=true;
	theTextBox.wordWrap=true;
	theTextBox.text=lv.leg1;
 
	format = new TextFormat();
	format.font = "Arial";
	format.bold = false;
	format.size = 9;
	format.multiline = true;
	format.wordWrap = true;
	format.textColor = 0xCCCCCC;
	format.align = "Center";
 
	theTextBox.setTextFormat(format);
 
	_root.createTextField("theTextBox2",350,630,490,150,30);
	theTextBox2.background=true;
	theTextBox2.border=false;
	theTextBox2.backgroundColor=0xFFFFFF;//white
	theTextBox2.borderColor=0x000000;//black
	theTextBox2.multiline=true;
	theTextBox2.wordWrap=true;
	theTextBox2.text=lv.leg2;
 
	theTextBox2.setTextFormat(format);
 
	createEmptyMovieClip("photo2",1);
	photo2.loadMovie("../img_ref/"+lv.id2+".jpg");
	photo2._x = 640;
	photo2._y = 365;
 
	ref1.onEnterFrame = function (){
		trace("On est dans ref1");
		stop();
	};
	stop();
 
};
 
lv.load("http://www.asdecarreau.com/asdepique/img_rand.php");
Des suggestions?
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 10h34   #2
Membre Expert
 
Avatar de dom_dev
 
Inscription : février 2006
Messages : 2 067
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 2 067
Points : 2 114
Points : 2 114
bonjour,

à mon avis un "stop()" dans une boucle onENterFrame ne sert à rien. (je peux me tromper)
Note, pour arrêter la fonction onEnterFrame c'est :
Code :
delete this.onEnterFrame;
crdlt
__________________
Si la ou les réponses obtenues vous ont donné satisfaction n'oublier pas ->
Et ne rajoutez pas de nouvelles questions éternellement dans le même post surtout si vous en n'êtes pas l'auteur
MERCI
dom_dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 10h43   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Merci pour cette précision.

Effectivement celà permet de limiter le trace() à une seule sortie. Mais je pense que le problème n'en est pour autant que réglé en surface: la fonction sur l'onEnterFrame est détruite, mais le Load() ne s'en répète pas moins.

Quand je lance l'animation en ligne, je note que même après la fin de l'animation, le navigateur . m'affiche toujours dans la barre d'état "Transfert des données depuis...". Ce qui semble indioquer que l'activité ne s'arrête pas quand elle devrait.

De plus, l'objectif à terme est de placer un lien sur l'image chargée dynamiquement. Le onEnterFrame me sert à tester la sortie, je voudrais le remplacer par un onRelease sur le bouton placé au-dessus de la zone de l'image.

Code :
1
2
3
4
 
	ref1_btn.onRelease = function (){
		getURL(lien1);
	};
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 11h18   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Pour ceux que ça intéresse de cerner le problème, le résultat ci-dessous:

http://www.asdecarreau.com/asdepique...ws_rotate.html

Les images devraient être cliquables mais ne le sont pas (même si j'ai mis un getURL() sur onRelease à la place du onEnterFrame()).

Code :
1
2
3
4
5
6
7
8
9
	ref1.onRelease = function (){
		getURL(lv.lien1,"_blank","GET");
		delete this.onRelease;
	};
 
	ref2.onRelease = function (){
		getURL(lv.lien2,"_blank","GET");
		delete this.onRelease;
	};
On voit aussi que le navigateur continue à travailler après la fin attendue de l'animation.
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 12h51   #5
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
lut,

les 2 stop dans le code ne servent à rien, il faut juste en mettre un aprés la chargement :
Code :
1
2
lv.load("http://www.asdecarreau.com/asdepique/img_rand.php");
stop();
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 13h53   #6
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Oui, c'est vrai, c'est plus propre comme ça. Mais ça ne règloe pas mon problème...
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 14h35   #7
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
re,

en general on ne delete pas un onRelease ..

sinon le GET du geturl ne me parait pas indispensable ..

quel est le fonctionnement global que doit avoir ton animation ?? (un pe confus)
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 17h16   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Oui, je me suis débarrasé du deletee onRelease, scorie de recherches antérieures. Quant au GET du GetURL, j'ai fait la tentative de la mettre pour voir si par extraoridnaire ce n'était pas ça qui empêchait l'activation des liens. Force est de constater que non?

Le fonctionnement global de l'animation? Elle est destinée à être appellée dans une autre application, ce qui explique la sobriété de la mise en page actuelle... Pour le reste, l'idée est simple:

On va chercher dans une base de données, grâce au Loadvars et à un script PHP, deux entrées au hasard. Ces deux entrées comportent plusieurs champs, dont l'ID, le titre, l'image associée et le lien qui va bien.

Globalement, tout marche bien désormais, à l'exception des liens.
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 19h45   #9
Rédacteur/Modérateur
 
Avatar de beekeep
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 1 606
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 1 606
Points : 2 234
Points : 2 234
re,

ouai ben ya pas plus efficace qu'un geturl donc ça doit etre ton anim qui va pas trop ..

envoi ton fla stu kje jette un oeil.

+
beekeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 00h12   #10
Membre confirmé
 
Avatar de Fares BELHAOUAS
 
Homme Fares Belhaouas
Développeur Flex & Java
Inscription : mars 2002
Messages : 182
Détails du profil
Informations personnelles :
Nom : Homme Fares Belhaouas
Âge : 36
Localisation : Algérie

Informations professionnelles :
Activité : Développeur Flex & Java
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2002
Messages : 182
Points : 236
Points : 236
Envoyer un message via MSN à Fares BELHAOUAS Envoyer un message via Yahoo à Fares BELHAOUAS
Salam lemilig,

En fait c'est un problème de synchronisation, c'est toujours comme ça avec flash, tout est presque asynchrone, ce qui t'oblige à utiliser des listener, et de ne configurer tes affaires que quand tout est chargé.

Je pense que tu lance le load de l'image, juste après tu fais un onRelease, mais je crois que quand l'image qui est considéré comme un movieclip est chargée, tous les évenement boutons sont comme réinitialisé. on doit donc utiliser un "MovieClipLoader" pour savoir quand l'image est réellement chargé.

Le stop ne veut pas dire que tout le script va s'arrêter, mais juste la tete de lecture de l'animation.

voici mon code :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
stop();
 
_quality = "BEST";
 
var image_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
image_mcl.addListener(mclListener);
 
mclListener.onLoadInit = function(target_mc:MovieClip) {
  trace(target_mc._name+" = "+target_mc._width+" X "+target_mc._height+" pixels");
	if (target_mc._name == "photo") {
		target_mc.onRelease = function () {
			trace("photo.onRelease");
			getURL("http://www.google.com", "_blank");
		};
	}
	else if (target_mc._name == "photo2") {
		target_mc.onRelease = function () {
			trace("photo2.onRelease");
			getURL("http://www.yahoo.com", "_blank");
		};
	}
};
 
//function random
lv=new LoadVars();
lv.onLoad = function() {
 
	_root.createEmptyMovieClip("photo", _root.getNextHighestDepth());
	photo._x = 450;
	photo._y = 365;
	// On load l'image par MovieClipLoader
	image_mcl.loadClip("../img_ref/1.jpg", photo);
 
	//create a blank text box and set its parameters
	_root.createTextField("theTextBox",400,450,490,150,20);
	theTextBox.background=false;
	theTextBox.border=false;
	theTextBox.backgroundColor=0xFFFFFF;//white
	theTextBox.borderColor=0x000000;//black
	theTextBox.multiline=true;
	theTextBox.wordWrap=true;
	theTextBox.text=lv.leg1;
 
	format = new TextFormat();
	format.font = "Arial";
	format.bold = false;
	format.size = 9;
	format.multiline = true;
	format.wordWrap = true;
	format.textColor = 0xCCCCCC;
	format.align = "Center";
 
	theTextBox.setTextFormat(format);
 
	_root.createTextField("theTextBox2",350,630,490,150,30);
	theTextBox2.background=true;
	theTextBox2.border=false;
	theTextBox2.backgroundColor=0xFFFFFF;//white
	theTextBox2.borderColor=0x000000;//black
	theTextBox2.multiline=true;
	theTextBox2.wordWrap=true;
	theTextBox2.text=lv.leg2;
 
	theTextBox2.setTextFormat(format);
 
	_root.createEmptyMovieClip("photo2", _root.getNextHighestDepth());
	photo2._x = 640;
	photo2._y = 365;
	// On load l'image par MovieClipLoader
	image_mcl.loadClip("../img_ref/2.jpg", photo2);
};
 
lv.load("http://lion/flash-test/bin/script.php");
J'espère que ça règle ton problème

à Ciao bonsoir
Fares BELHAOUAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 09h45   #11
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Wow... Grand merci pour le coup de pouce... Je vais voir ça de suite...
lemilig 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 11h48.


 
 
 
 
Partenaires

Hébergement Web