Bonjour,
Ton problème est un problème récurant dès lors que l'on souhaite scinder une animation en X fichiers SWF.
Je pense qu'il vaut mieux comprendre une bonne fois pour toute plutôt que de chercher d'un forum à l'autre et recopier au petit bonheur des lignes de code sans les comprendre. Cela étant un peu de théorie...
Il y a plusieurs méthodes possibles dans Flash pour organiser un site ou des animations entre elles.
1. Un seul fichier SWF avec tout dedans et utilisation des images clés pour passer d’une partie à l’autre.
Instruction (gotoAndPlay,GotoAndStop)
Inconvénient : Dès que le fichier devient volumineux nécessité de faire une barre de préload.
Avantage : abordable pour le graphiste débutant dans la programmation AS
2. X fichier SWF chargés à des niveaux différents par empilement.
Instruction (loadMovieNum, _level)
Inconvénient : l’utilisation des _level est buggée. De plus il faut superposer les niveaux correctement ou utiliser des SWF de mêmes tailles.
Avantage : petits fichiers à appeler à la demande de l’utilisateur donc pas besoin de barre de téléchargement.
3. X fichiers SWF chargés dans des MovieClip sur des profondeurs différentes.
Instruction (MovieClipLoader, ou composant Loader, createEmptyMovieClip, attachMovieClip)
Inconvénient : être organisé dans sa tête notamment si on emboite les Movieclip les uns dans les autres
Avantage : C’est comme ça qu’il faut utiliser Flash pour optimiser le code et la fluidité des animations.
Comment faire pour la troisième solution ?
Je propose ici une solution universelle de chargement de jpg,gig,swf,png externes, dans des MovieClip, à la demande.
Le principe est le suivant :
Nous utilisons la classe MovieClipLoader. Cette classe sert uniquement à charger des fichiers externes de type swf,jpg,gif,png.... Elle s'utilise sous la forme d'une occurrence de cette classe et d'un écouteur sur ses méthodes.
Quand elle est en place il faut créer un MovieClip vierge (createEmptyMovieClip) puis l'appeler (loadClip). Le code que je mets à votre disposition est utilisable tel que dans toutes vos réalisations.
Pour tester créez un fichier SWF avec un texte animé dedans, par exemple. Mettez dans le même dossier une image jpg ou png.
Pour illustrer le code je considère que vous avez un fichier swf nommé texteanime.swf et une photo portrait.jpg dans le même dossier que le fichier CodePrincipal.swf
Fichier CodePrincipal.swf
1 calque sur lequel il y à une zone de texte dynamique nommée message dans les propriétés (non obligatoire juste pour pouvoir afficher les messages lors du chargement d’un fichier externe)
1 calque nommé ActionScript sur lequel il faut écrire le code suivant sur la première image clé (respect des majuscules, minuscule obligatoire) :
//--------------------------- Module de chargement universel ----------------------------------------
//Création d'une occurrence de l'objet MovieClipLoader pour gestion du chargement JPG, SWF, GIF, PNG
var ChargementFichier:MovieClipLoader = new MovieClipLoader();
/*Création d'un objet d'écoute sur lequel nous placerons un écouteur
chargé de nous décrire ce qui se passe pendant le chargement*/
var EcouteurDeChargement:Object = new Object();
//Fonction gérant le début du chargement
EcouteurDeChargement.onLoadStart = function(clipActuel:MovieClip):Void {
//Message ça commence
message.text = "Le chargement débute"
message._visible = true;
};
//Fonction gérant l'arrivée des octets
EcouteurDeChargement.onLoadProgress = function(clipActuel:MovieClip, octetsCharger:Number, totalACharger:Number) {
//Message Déjà disponible
message.text = "Déjà disponible .."+((Math.round(octetsCharger/1024)*100)/100)+" Ko / "+((Math.round(totalACharger/1024)*100)/100)+" Ko";
message._visible = true;
};
//Fonction gérant la fin du chargement
EcouteurDeChargement.onLoadComplete = function(clipActuel:MovieClip):Void {
//Message disponible
message.text = "Le fichier est complètement chargé"
message._visible = true;
};
//Fonction gérant l'exécution de la première image de l'élément chargé
EcouteurDeChargement.onLoadInit = function(clipActuel:MovieClip):Void {
message.text = "";
message._visible = false
/*En fonction du nom du Movie clip chargé, positionnement à l'écran.
il faut recopier les lignes suivante pour chacun des clips que
vous souhaitez charger*/
//Traitement du fichier swf contenant l'animation du texte
if (clipActuel._name == "AnimationTexte") {
/*Position à l'écran centré ou
clipActuel._x = valeur en pixel
clipActuel._y = valeur en pixel*/
//Centrage horizontal du texte à l'écran et position en haut
clipActuel._x = (Stage.width-clipActuel._width)*.5;
clipActuel._y = 0
}
//Traitement du MovieClip contenant la photo
if (clipActuel._name == "Photo") {
//Centrage de la photo
clipActuel._x = (Stage.width-clipActuel._width)*.5;
clipActuel._y = (Stage.height-clipActuel._height)*.5;
}
};
//Fonction gérant les erreurs de chargement
EcouteurDeChargement.onLoadError = function(clipActuel:MovieClip, codeErreur:String,numeroErreur:Number):Void {
message.text = codeErreur + " " + numeroErreur
message._visible = true;
};
//Activation de l'écouteur de chargement
ChargementFichier.addListener(EcouteurDeChargement);Bien maintenant faites une 2 image clé vide sur le calque ActionScript puis :
/*Dès que je souhaite appeler un fichier SWF externe ou autre image jpg, png, gif ...
je pratique comme suit :
this.createEmptyMovieClip("Le nom du MovieClip a créer", Profondeur)
ChargementFichier.loadClip(le nom du fichier SWF à charger,le nom du MovieClip qui vient d'être créé.)*/
//Création d'un MC chargé de recevoir le fichier swf contenant l'animation du texte
this.createEmptyMovieClip("AnimationTexte",0)
//Appel à la fonction de chargement précédement créé
ChargementFichier.loadClip("texteanime.swf",AnimationTexte)
//Création d'un MC chargé de recevoir la photo
this.createEmptyMovieClip("Photo",1)
//Appel à la fonction de chargement
ChargementFichier.loadClip("Portrait.jpg",Photo)
stop();Voilà bon courage...