cs_FRH
Messages postés22Date d'inscriptionmercredi 28 mai 2003StatutMembreDernière intervention 1 juin 2010
-
26 mars 2010 à 10:19
cs_FRH
Messages postés22Date d'inscriptionmercredi 28 mai 2003StatutMembreDernière intervention 1 juin 2010
-
26 mars 2010 à 10:44
Flash CS4 / AS3.
Bonjour,
Je charge dans un tableau des cartes de visites (clip CarteVisite) généré après lecture d'un fichier XML. je désire afficher ces cartes sur deux colonnes. Je voudrais que chaque carte de visite apparaisse progressivement à l'écran (en jouant sur l'alpha du clip de 0 à 1, durée de l'apparition : 1s (soit 24 images)).
stop();
//Déclaration des variables
var chargeurURL:URLLoader;
var requete:URLRequest;
var visiteurs:XML;
var lesCartes:Array = new Array();
var time:Timer = new Timer(500,0);
var compteur:uint = 0;
//Emplacement de départ des cartes de visite
var startP:Point = new Point(20,130);
var pasP:Point = new Point(6,15);
//*****************************************************************************
//Chargement du fichier de données et mise en place de l'écouteur de chargement
//*****************************************************************************
//Emplacement du fichier de données
requete = new URLRequest("visiteurs.xml");
chargeurURL = new URLLoader();
chargeurURL.addEventListener(Event.COMPLETE,donneesChargees);
chargeurURL.addEventListener(IOErrorEvent.IO_ERROR,erreurChargementDonnees);
time.addEventListener(TimerEvent.TIMER, nouvelleCarte);
chargeurURL.load(requete);
//Déclaration des écouteurs pour le chargeur
function erreurChargementDonnees(e:Event):void
{
trace("erreur de chargement");
}
function donneesChargees(e:Event):void
{
visiteurs = new XML(chargeurURL.data);
visiteurs.ignoreWhitespace = true;
chargerCartes();
time.start();
}
function chargerCartes():void
{
//Créer les cartes de visites et les ajoute à la liste lesCartes
var newCarte:CarteVisite;
var visiteur:XMLList;
for (var i:uint=0; i<visiteurs.children().length(); i++)
{
//Création d'une carte de visite
newCarte = new CarteVisite();
//Récupère les données du visiteur
visiteur = visiteurs.child(i);
//Affecte les données à la carte de visite
newCarte.txtNom.text = String(visiteur.@Nom).toUpperCase() + " " + String(visiteur. @ prenom).toLowerCase();
newCarte.txtSociete.text = visiteur.@societe;
newCarte.txtFonction.text = visiteur.@fonction;
//Ajoute la carte de visite à la liste
lesCartes.push(newCarte);
}
}
function nouvelleCarte(e:Event):void
{
time.stop();
if (compteur < lesCartes.length)
{
afficherCartes(compteur);
compteur++;
time.start();
}
}
function afficherCartes(i:uint):void
{
//Défini la position de la carte
var laCarte:CarteVisite;
laCarte = lesCartes[i];
//laCarte.scaleX=1;
//laCarte.scaleY=1;
laCarte.x = startP.x + (i%2) * (laCarte.width + pasP.x) ;
laCarte.y = startP.y + int(i/2) * (laCarte.height+ pasP.y);
laCarte.alpha = 1;
addChild(laCarte);
apparitionCarte(laCarte);
}
Pour l'effet d'apparition, j'ai tenté d'utiliser la classe AnimatorFactory et MotionBase, mais le résultat n'est pas convainquant, les fondus semblant apparaitre en boucle "désynchronisée", bref, pas génial.
function apparitionCarte(target:MovieClip):void
{
import fl.motion.AnimatorFactory;
import fl.motion.MotionBase;
import flash.filters.*;
import flash.geom.Point;
var mov_apparaitre:MotionBase;
if (mov_apparaitre == null)
{
import fl.motion.Motion;
mov_apparaitre = new Motion();
mov_apparaitre.duration = 24;
mov_apparaitre.overrideTargetTransform();
mov_apparaitre.addPropertyArray("alphaMultiplier", [0.000000,0.043478,0.086956,0.130435,0.173913,0.217391,0.260869,0.304348,0.347826,0.391304,0.434782,0.478261,0.521739,0.565217,0.608695,0.652174,0.695652,0.739130,0.782609,0.826087,0.869565,0.913043,0.956522,1.000000]);
var af_apparaitre:AnimatorFactory = new AnimatorFactory(mov_apparaitre);
af_apparaitre.addTarget(target,1);
}
}
Auriez-vous une astuce pour résoudre mon problème ?
Tant que j'y suis, est-il possible de spécifier sur quel calque de mon animation je veux charger mes Cartes. Si j'ai créé un Calque "Les cartes", comment indiquer addChild que celles-ci doivent se charger sur le calque "Les cartes" ?
-----------------
PsychO
Orange73
Messages postés1375Date d'inscriptiondimanche 28 novembre 2004StatutMembreDernière intervention 2 août 2011 26 mars 2010 à 10:30
Hello,
Pour l'apparition en fondu, utilise plutôt les Tweens, soit avec les classe native de Flash, soit avec la classe TweenLite ou TweenMax. Les Tweens native devraient suffire.
Sinon, pour tu ne peut pas spécifier de calques pour les addChild.
A+
-- Orange73 --
"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
cs_FRH
Messages postés22Date d'inscriptionmercredi 28 mai 2003StatutMembreDernière intervention 1 juin 2010 26 mars 2010 à 10:44
Fabuleux ces Tween!
C'est la première fois que j'en utilise, et ça fonctionne parfaitement!
function apparitionCarte(target:MovieClip):void
{
import fl.transitions.*;
import fl.transitions.easing.*;
var effetAlpha:Tween = new Tween(target,"alpha",Regular.easeInOut,0,1,24);
}
Merci pour l'astuce, et je suis preneur pour toute astuce quant à leur utilisation!