Afficher progressivement des clips

cs_FRH Messages postés 22 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 1 juin 2010 - 26 mars 2010 à 10:19
cs_FRH Messages postés 22 Date d'inscription mercredi 28 mai 2003 Statut Membre Derniè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

2 réponses

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Derniè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)
0
cs_FRH Messages postés 22 Date d'inscription mercredi 28 mai 2003 Statut Membre Derniè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!

-----------------
PsychO
0
Rejoignez-nous