AS3 Supprimer une fonction via intéraction de la timeline

dieudesdieu Messages postés 2 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 5 mai 2011 - 2 mai 2011 à 11:36
dieudesdieu Messages postés 2 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 5 mai 2011 - 5 mai 2011 à 10:16
Salut a tous!

Bon alors voila je viens car j'ai un script que je n'arrive pas à arrêter.
C'est un visualisateur d'image que je voudrais mettre sur une image de ma timeline avec un contenu différent.
Le problème c'est que j'arrive à le charger mais quand je clique sur mes boutons le suivant se charge aussi, mais par dessus l'autre et impossible de faire que le premier disparaisse.

J'ai essayé avec removeEventListener et avec un ecouteur (currentFrame) mais c'est pas folichons puisque ca ne fait rien...

//ce type d'interaction je l'avais trouvé sur un site mais je ne retrouve plus. Bien entendu j'ai eu pas mal de choses à adapté pour mon site.

import flash.net.URLLoader;
import flash.net.URLRequest;
import fl.containers.UILoader;
import fl.controls.ProgressBar;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.events.*;
import flash.text.*;
import flash.filters.*;



if(currentFrame == 18) {


var dossierImage:String = 'images/';// On déclare les variable du dossier images...
var dossierImageMini:String = 'images/min/';//... Et des miniatures


var chargeur:URLLoader = new URLLoader ();//On crée une varaiable qui vas charger notre fichier xml
var adresse:URLRequest = new URLRequest("galerie.xml");//Voila le fichier

chargeur.load(adresse);//On charge le fichier
chargeur.addEventListener(Event.COMPLETE, finDuChargementXML);// Quand le téléchargement est fini on initialise la fonction finDuChargementXML

var alt:String;// On initialise la variable qui contient un texte

var formatTitre:TextFormat = new TextFormat  ;//On définit le style de notre texte pour les titres
formatTitre.color = 0xFFFFFF;
formatTitre.size = 17;
formatTitre.font = 'Orator Std';
formatTitre.align = 'center';

var texteAlt:TextField = new TextField();//On place le texte alternatif
texteAlt.text = '';//On incrémente la variable du texte de rien pour l'instant
texteAlt.x = 625;
texteAlt.y = 765;
texteAlt.width = 400;
this.addChild(texteAlt);//On ajoute le texte alternatif


var chargement:TextField = new TextField();//On initialise la variable de chargement
this.addChild(chargement);//Et on l'ajoute

function finDuChargementXML(evt:Event):void//On déclenche la réaction pour quand notre fichier xml est chargé
{
var monXML:XML = new XML(evt.target.data);// On initialise le fichier xml
var photoPrincipale:UILoader = new UILoader();// On crée un objet de la classe UILoader pour qu'il contienne notre grande image
photoPrincipale.source = dossierImage + monXML.image[1].attribute("src");
/*Pour pouvoir charger toutes les images du fichier on décris la source du fichier
en ciblant le dossier image plus haut, puis notre xml, et enfin la premiere
image de la premiere ligne de notre fichier xml.
*/

photoPrincipale.x = 375;
photoPrincipale.y = 175;
photoPrincipale.scaleContent = false;//On ne n'adapte pas le contenu afin d'être sur que je doive adapté mes photo en amont et ainsi optimiser leurs chargements

var translation:Array = [photoPrincipale.x,photoPrincipale.x + 30]; //On initialise le tableau en ajoutant 30 pixel à la premiere photo.

var select:String;// On prépare une variable à recevoir une image


texteAlt.text = monXML.image[1].attribute("alt");// De la meme facon qu'on à recupérer l'image, on récupère le texte
texteAlt.setTextFormat(formatTitre);// On applique la police etc au titre

this.addChild(photoPrincipale);// On affiche le loader

for (var i:String in monXML.image)// Maitenant on s'occupe des miniatures
{
var uil:UILoader = new UILoader();
uil.source = dossierImageMini + monXML.image[i].attribute("src");
uil.buttonMode = true;// On déclare que ce sont des boutons
uil.name = i;//On leurs donne une lettre pour pouvoir toutes les charger par la suite
uil.x = 75;
uil.y = 175;
uil.y += int((int(i)/3))*90;// On les places avec les écarts necessaires 
if (int(i) % 3 != 0)
{
uil.x += (int(i)%3)*90;
}

uil.width uil.height 70; // comme on à des carrés c'est plus facile
uil.alpha = 0.5;//on baisse leur opacité de moitié
uil.scaleContent = true;// On peut se permettre un sacleContent car de toute facon on doit les cropper en carré
uil.autoLoad = true;// et on les charges tout de suite

uil.addEventListener(MouseEvent.CLICK,clicImage);
uil.addEventListener(MouseEvent.MOUSE_OVER,overImage);
uil.addEventListener(MouseEvent.MOUSE_OUT,outImage);
this.addChild(uil);
}

function clicImage(e:Event):void
{

if (select == monXML.image[e.currentTarget.name].attribute("src"))
{
return;// si on clique sur l'image que l'on utilise il ne se passe rien
}

select = monXML.image[e.currentTarget.name].attribute("src"); //on incrémente nos variables
alt = monXML.image[e.currentTarget.name].attribute("alt"); //Idem


var myTweentText:Tween = new Tween(texteAlt,"alpha",Strong.easeOut,1,0,1,true);// on utilise la classetweens pour que ca soit SULBIME... 
/*Pour les tweens on à dabord l'objet sur lequel on veut agir, sur quel parametre on agit,
ensuite le "easing" CF: tt en haut, ensuite on dis d'ou il part et ou il arrive.
Ici il passe de visible à invisible. Et enfin la durée (en seconde)*/

var myTweenA:Tween = new Tween(photoPrincipale,"alpha",Strong.easeOut,1,0,1,true);
var myTweenPPW:Tween = new Tween(photoPrincipale,"x",Strong.easeIn,translation[0],translation[1],1,true);
var myTweenPPA:Tween = new Tween(photoPrincipale,"alpha",Strong.easeIn,1,0,1,true);
myTweenA.addEventListener(TweenEvent.MOTION_FINISH, changeImage);

}

function changeImage(e:Event):void//On s'attaque au changement d'image
{
photoPrincipale.source = dossierImage + select;// On reprend donc la variable select en fonction de là ou on clique
texteAlt.text = alt;//pareil pour le texte
texteAlt.setTextFormat(formatTitre);//et on applique le texte

var myTweenPPA2:Tween = new Tween(photoPrincipale,"alpha",Strong.easeOut,0,1,1,true);//pour la photo toujours les tweens
var myTweenPPW2:Tween = new Tween(photoPrincipale,"x",Strong.easeOut,translation[1],translation[0],1,true);
var myTweentText2:Tween = new Tween(texteAlt,"alpha",Strong.easeOut,0,1,1,true);
}

function overImage(e:Event):void//maintenant pour que ca soit encore plus joli on vas changer l'effet au RollOver
{
var monOmbre:DropShadowFilter = new DropShadowFilter();//avec une ombre
monOmbre.distance = 3;
monOmbre.color = 0xAAAAAA;
monOmbre.blurX = 5;
monOmbre.blurY = 5;
monOmbre.quality = 3;
e.currentTarget.filters = [monOmbre];//qu'on applique...

var myTweenMA2:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,0.5,1,1,true);//....joliement
var myTweenMW2:Tween = new Tween(e.currentTarget,"width",Elastic.easeOut,e.currentTarget.width,75,1,true);
var myTweenMH2:Tween = new Tween(e.currentTarget,"height",Elastic.easeOut,e.currentTarget.height,75,1,true);
}

function outImage(e:Event):void//Quand on sors du survol
{
var monOmbre:DropShadowFilter = new DropShadowFilter();
monOmbre.distance = 0;
monOmbre.color = 0x888888;
monOmbre.blurX = 0;
monOmbre.blurY = 0;
monOmbre.quality = 3;
e.currentTarget.filters = [monOmbre];
var myTweenMA:Tween = new Tween(e.currentTarget,"alpha",Strong.easeOut,1,0.5,1,true);
var myTweenMW:Tween = new Tween(e.currentTarget,"width",Elastic.easeOut,e.currentTarget.width,70,1,true);
var myTweenMH:Tween = new Tween(e.currentTarget,"height",Elastic.easeOut,e.currentTarget.height,70,1,true);
}
}
}
else {
chargeur.removeEventListener(Event.COMPLETE, finDuChargementXML);
}




Voila donc si quelqu'un pouvais me donner un petit coup de main. Je suis sur que c'est facile mais impossible d'arriver à passer ce problème!!!

Merci beaucoup

2 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
5 mai 2011 à 06:32
Hello,

à mon avis tu n'envisages pas la bonne méthode : plutôt que de placer ce même script sur différentes images clés, tu aurais à mon avis meilleur compte de ne le placer que sur une seule image clé (programmation procédurale), ainsi tu auras une fonction à créer pour gérer le changement d'album et faire les removeChild qui vont bien pour initialiser l'affichage de ton nouvel album. Dans cette optique tu peux envisager de n'avoir qu'un seul fichier .xml, qu'un seul dossier où sont rangées tes images (avec d'éventuels sous-dossiers), donc une plus grande souplesse quand à la maintenance.

A plus ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;

musichrono
0
dieudesdieu Messages postés 2 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 5 mai 2011
5 mai 2011 à 10:16
effectivement maintenant que tu le dis ca me semble un peu plus judicieux...
Même si je maitrise surement pas encore assez ca m'apprendra bien :)

Merci pour ta réponse!
0
Rejoignez-nous