begin process at 2012 05 27 20:07:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

lundi 5 avril 2010 à 23:32:07 | setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

Bonsoir tout le monde,

je suis en train d'arriver au bout de la réalisation de mon diaporama perso, et il me reste un point à terminer : le mode "SlideShow" qui permet, en appuyant sur play, d'afficher les images les unes après les autres toutes les x secondes.
J'utilise donc un "setInterval" pour gérer cela, problème : mon setInterval ne lance l'affichage que d'une seule image, et les autres images ne suivent pas.
J'ai regardé du côté de la doc et je ne vois pas réellement où peut être mon erreur.

Voici mon code :
Code ActionScript :
function SlideShow(){
		removeMovieClip("monClip");
		var clip:MovieClip = this._root.attachMovie("IDrebours","rebours",getNextHighestDepth()+1,{_x:904.9,_y:626.8});
		var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
		function loadBitmapSmoothed(url:String, cible:MovieClip) { 
		var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 
		
		var listener:Object = new Object();

		listener.tmc = cible;
		
		listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
			var pourcentage:Number = bytesLoaded/bytesTotal*100;
			if(pourcentage<100){
				_root.clipRoue._visible = true;
			}
			if(pourcentage == 100){
				_root.clipRoue._visible = false;
				Wash.start();
				new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
				mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
			}
		}

		listener.onLoadInit = function(mc:MovieClip){
		mc._visible = false;
		_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
		_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
		ZoomCalcul = new Array();
		zoomTaux.text = "";
		
		bitmap.dispose();
		bitmap = new BitmapData(mc._width, mc._height, true);
		
		this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
		bitmap.draw(mc);
		}	

		var loader:MovieClipLoader = new MovieClipLoader(); 
		loader.addListener(listener); 
		loader.loadClip(url, bmc);
		}
		if(Pos == visuels_noms.length){
		Pos = -1;
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		Pos = Pos+1;
		}else if(Pos !== visuels_noms.length){
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		Pos = Pos+1;
		}
		if(rebours.compteur.text == 0){
			removeMovieClip("rebours");
		}
}

clipMenu.btn_play.onRelease = function(){
	Diap = setInterval(SlideShow(), 6000);
}

clipMenu.btn_pause.onRelease = function(){
	clearInterval(Diap);
	removeMovieClip("rebours");
}


Si vous avez des suggestions je suis preneur :)

Merci,

BBFUNK01
mardi 6 avril 2010 à 14:19:10 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

Orange73

Membre Club
Hello,
Code ActionScript :
Diap = setInterval(SlideShow, 6000);


A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
mardi 6 avril 2010 à 21:54:04 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

Salut Orange73, merci pour ta réponse : effectivement ça fonctionne ainsi :
Code ActionScript :
Diap = setInterval(SlideShow, 6000);

le seule souci c'est que les images ne se loadent pas, probablement parce qu'il faut que je réinitialise les variables des positions dans le xml, donc j'y travaille.

Sinonn si jamais t'as une idée pour ce problème-ci (problème bizarre d'ailleurs...);
j'ai également dans mon diaporama des commandes "précédent" et "suivant", pour gérer la boucle lorsque par exemple on clique sur "précédent" et que l'on est sur la 1ère image du xml, j'indique donc qu'il faut passer à la dernière image stockée dans le xml, comme ceci :
Code ActionScript :
clipMenu.btn_prec.onRelease = function(){
	clearInterval(Diap);
	removeMovieClip("rebours");
	removeMovieClip("contact");
	removeMovieClip("informations");
	clipMenu.btn_play._visible = true;
	clipMenu.btn_play.enabled = true;
	clipMenu.btn_pause._visible = false;
	clipMenu.btn_pause.enabled = false;
	if(Pos == 0){
		Pos = visuels_noms.length;
	}
		removeMovieClip("monClip");
		var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
		function loadBitmapSmoothed(url:String, cible:MovieClip) { 
		var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 
		
		var listener:Object = new Object();

		listener.tmc = cible;
		
		listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
			var pourcentage:Number = bytesLoaded/bytesTotal*100;
			if(pourcentage<100){
				_root.clipRoue._visible = true;
			}
			if(pourcentage == 100){
				_root.clipRoue._visible = false;
				Wash.start();
				new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
				mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
			}
		}

		listener.onLoadInit = function(mc:MovieClip){
		mc._visible = false;
		_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
		_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
		ZoomCalcul = new Array();
		zoomTaux.text = "";
		
		bitmap.dispose();
		bitmap = new BitmapData(mc._width, mc._height, true);
		
		this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
		bitmap.draw(mc);
		}	

		var loader:MovieClipLoader = new MovieClipLoader(); 
		loader.addListener(listener); 
		loader.loadClip(url, bmc);
		}
		loadBitmapSmoothed(folder + visuels_noms[i, Pos-1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos-1];
		Pos = Pos-1;
}

... et ça marche nickel :)

J'ai donc fait l'inverse sur le bouton "suivant" :
Code ActionScript :
clipMenu.btn_suiv.onRelease = function(){
	clearInterval(Diap);
	removeMovieClip("rebours");
	removeMovieClip("contact");
	removeMovieClip("informations");
	clipMenu.btn_play._visible = true;
	clipMenu.btn_play.enabled = true;
	clipMenu.btn_pause._visible = false;
	clipMenu.btn_pause.enabled = false;
		removeMovieClip("monClip");
		var clip:MovieClip = this._root.attachMovie("IDmonClip","monClip",getNextHighestDepth()+1,{_x:600,_y:328.5});
		function loadBitmapSmoothed(url:String, cible:MovieClip) { 
		var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth()); 
		
		var listener:Object = new Object();

		listener.tmc = cible;
		
		listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
			var pourcentage:Number = bytesLoaded/bytesTotal*100;
			if(pourcentage<100){
				_root.clipRoue._visible = true;
			}
			if(pourcentage == 100){
				_root.clipRoue._visible = false;
				Wash.start();
				new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
				mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
			}
		}

		listener.onLoadInit = function(mc:MovieClip){
		mc._visible = false;
		_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
		_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
		ZoomCalcul = new Array();
		zoomTaux.text = "";
		
		bitmap.dispose();
		bitmap = new BitmapData(mc._width, mc._height, true);
		
		this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
		bitmap.draw(mc);
		}	

		var loader:MovieClipLoader = new MovieClipLoader(); 
		loader.addListener(listener); 
		loader.loadClip(url, bmc);
		}
		if(Pos == visuels_noms.length){
		Pos = -1;
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		trace(Pos);
		Pos = Pos+1;
		trace(Pos);
		}else if(Pos !== visuels_noms.length){
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		Pos = Pos+1;
		trace(Pos);
		}
}

... là ça marche aussi, seulement lorsque l'on est sur la dernière image stockée dans le xml et que l'on clique sur le bouton, cela me met "undefined", et si on clique encore une fois, et bien c'est bon ça affiche la 1ère image stockée dans le xml, pourtant je réintialise bien la position dans mon xml :
Code ActionScript :
if(Pos == visuels_noms.length){
		Pos = -1;
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		trace(Pos);
		Pos = Pos+1;
		trace(Pos);
		}

Je mets "Pos = -1" car dans la fonction je loade "Pos+1", donc 0, donc la 1ère donnée de mon Array, bref bizarre tout ça.

Bon en tout cas ça se précise et j'espère avoir terminé bientôt.

Merci,

BBFUNK01

mardi 6 avril 2010 à 22:45:35 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

Je viens de trouver pour mon bouton "suivant", en fait il faut enlever 1 à la longueur du tableau (normal finalement vu que le tableau commence à 0 :) ):
Code ActionScript :
if(Pos == visuels_noms.length-1){
		Pos = -1;
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		trace(Pos);
		Pos = Pos+1;
		trace(Pos);
		}


comme ça ça marche.

Pour mon setInterval en tout cas ma fonction LoadBitmapSmoothed() ne fonctionne pas :(, je n'ai que le texte dynamique qui est chargé suivant le xml, mais pas les images.

BBFUNK01
mardi 6 avril 2010 à 23:25:40 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

Bon et bien voici ma conclusion :

- quand je mets sur mon bouton "play" :
Code ActionScript :
Diap = setInterval(SlideShow, 6000);

ça me lance un seul intervalle (donc une seule image).

- quand je mets sur mon bouton "play":
Code ActionScript :
Diap = setInterval(SlideShow(), 6000);

ça me lance bien ma fonction SlideShow() en boucle, mais il n'y a que mon champ de texte dynamique qui affiche les noms de mes images, mes images ne sont pas loadées.

Bref, ça me laisse pantois tout ça :0

BBFUNK01
mardi 6 avril 2010 à 23:27:40 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

...euh...

j'ai inversé les fonctions et leurs résultats :) :
Code ActionScript :
Diap = setInterval(SlideShow(), 6000);

ne me lance qu'un intervalle.

BBFUNK01
mercredi 7 avril 2010 à 23:56:26 | Re : setInterval() pour diaporama qui ne lance l'action qu'une seule fois :(

BBFUNK01

Réponse acceptée !
Hello,

bon et bien après avoir testé tout et n'importe quoi dans tous les sens j'ai enfin réussi à faire fonctionner le mode "SlideShow", je serai incapable d'expliquer pourquoi ça marche de cette manière car en fait j'ai dispatché le contenu initial de ma fonction "SlideShow()" en 2 autres fonctions que j'ai ensuite réintégré dans la fonction "SlideShow()"... il y a certainement une explication (...logique?), mais j'ai la flemme de la chercher :). En tout cas ça marche :
Code ActionScript :
function Diaporama(){
	function loadBitmapSmoothed(url:String, cible:MovieClip){ 
		var bmc:MovieClip = cible.createEmptyMovieClip("bmc", cible.getNextHighestDepth());
		trace("bmc");
		
		var listener:Object = new Object();
		trace("listener");

		listener.tmc = cible;
		
		listener.onLoadProgress = function(mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void{
			var pourcentage:Number = bytesLoaded/bytesTotal*100;
			if(pourcentage<100){
				_root.clipRoue._visible = true;
			}
			if(pourcentage == 100){
				trace("chargement");
				_root.clipRoue._visible = false;
				Wash.start();
				new Tween(monClip, "_alpha", Elastic.easeOut, 0, 100, 20, true);
				mx.transitions.TransitionManager.start(monClip, {type:mx.transitions.Squeeze, direction:mx.transitions.Transition.IN, duration:1, easing:mx.transitions.easing.Bounce.easeOut});
			}
		}

		listener.onLoadInit = function(mc:MovieClip){
		trace("init");
		mc._visible = false;
		_root.monClip.clip2._x = _root.monClip.clip2._x-mc._width/2;
		_root.monClip.clip2._y = _root.monClip.clip2._y-mc._height/2;
		ZoomCalcul = new Array();
		zoomTaux.text = "";
		
		bitmap.dispose();
		bitmap = new BitmapData(mc._width, mc._height, true);
		
		this.tmc.attachBitmap(bitmap, this.tmc.getNextHighestDepth(),"auto",true); 
		bitmap.draw(mc);
		trace("draw");
		}	

		var loader:MovieClipLoader = new MovieClipLoader(); 
		loader.addListener(listener); 
		loader.loadClip(url, bmc);
		}
		if(Pos == visuels_noms.length-1){
		Pos = -1;
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		trace(Pos);
		Pos = Pos+1;
		trace(Pos);
		}else if(Pos !== visuels_noms.length){
		loadBitmapSmoothed(folder + visuels_noms[i, Pos+1], monClip.clip2);
		clipMenu.designation.text = visuels_titres[i, Pos+1];
		Pos = Pos+1;
		trace(Pos);
		}
}

function SlideShow(){
	Nettoyer();
	Diaporama();
}
		

clipMenu.btn_play.onRelease = function(){
	Diap = setInterval(SlideShow, 6000);
	clipMenu.btn_pause._visible = true;
	clipMenu.btn_pause.enabled = true;
	clipMenu.btn_play._visible = false;
	clipMenu.btn_play.enabled = false;
}


BBFUNK01


Cette discussion est classée dans : function, mc, root, monclip, pos


Répondre à ce message

Sujets en rapport avec ce message

On prend les même et on recommence [ par Soapza ] Voilà un autre problème un peu plus dur que celui d'hier mais du même acabit :stop();_root.accueilgeneral_mc.contact_mca.contact_bout.onRelease = func Local Connection + Mouselistener [ par nuclearprout ] Bonjour, ce que je souhaite faire est complexe mais d'une complexitude, mortelle !J'ai deux anims ;La première contient un clip "mc-zone" qui quand il Problèm pour appliquer des actions sur des clips dupliqués avec attachMovie [ par converse ] Bonjour à tous,J'ai besoin de créer un slider (plusieurs images miniatures qui défilent à droite ou à gauche selon la position de la souris),J'ai bug sur fondu movie clip [ par missopium ] bonsoirvoila mon souci j ai un bug sur un menu que je suis en train de concevoirau passage de la souris sur mes logos l intitulé s affiche en fondu (r deplacement tween [ par gobgob74 ] Bonjourj'ai des probleme avec les tween, mon clip melange les diferrents coordonnees des mouvement  alors Comment uiliser la class tween pour creer de Dessinez dans une certaine zone [ par panicq ] Bonjour à tous,Je suis en train de faire une petite application de dessin et j'aimerai savoir comment faire pour que les lignes ne sortent pas d'un mo Damier avec une boucle [ par sliverman ] Bonjour à tous, Je suis en train de m'entrainer un peu mais la je bloque, je fais tout en actionscript 2.0, donc je fait this.createEmptyMovieClip("mo 2 fonctions sur un bouton [ par 1800toutanne ] Bonjour a tous,J'ai une petite question concernant 2 fonctions que j aurai aimé faire fonctionner en même temps sur le onrelease de mes boutons..J'ai fonction qui fait ramer ma machine [ par mikouRoux ] Salut à tous,Merci beaucoup pour votre aide ces dernier jours. Sans vous je ne serais jamais parvenu à faire mon petit programme.A présent, tout comme URGENT : problème de lecture d'un swf loadé [ par kbeaba ] Bonjour,J'appelle un swf externe par le biais d'un conteneur vide (monClip_mc) en demandant à une petite animation de loadi (loading) d'être visible p


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales