LoadMovie (); et XML

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011 - 25 avril 2007 à 15:04
Mildek Messages postés 1 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 4 février 2009 - 4 févr. 2009 à 00:36
Yop les gens !

Bon voilà, j'ai une anim principal dans laquelle je fais appel à un swf externe qui contient un AS permettant de faire un diaporama images aléatoires avec fondu via XML...

Ce diapo fonctionne très bien... Malheureusement lorque sur l'anim principal je fais appel à ce diapo via loadMovie (); les transitions ne fonctionne pas... et une seul image apparait. Voici les Codes AS :

Anim principal (AS loadMovie qui est dans un clip "header") :

stop();

this.createEmptyMovieClip("container", this.getNextHighestDepth()); //getNextHighestDepth() n'est pas disponible pour les versions < 7 (pensez à mettre une profondeur (nombre) [merci Raz-L])

container.loadMovie("Header.swf");
 
this.onEnterFrame = function() {
        container._x = -328;
        container._y = -137;
        delete this.onEnterFrame;
}

Anim Externe (Diapo) :

stop();

//Création des variables
var images:Array = new Array();
var param:Array = new Array();
var imageActu:Number;
var imageNext:Number;
var annee:Date = new Date();
//Viariables des intervals
var interAlpha:Number;
var interImage:Number;
var interTest:Number;
//Temps de pause par défaut
var timeStart:Number = 1000;
var timeBetween:Number = 500;
//Variable pour la transition alpha
var val_alpha:Number = 0;
//Création des flags
var image1:Boolean = false;
var image2:Boolean = false;
var init:Boolean = true;

//MovieClip Conteneur1
var conteneur1:MovieClip = this.createEmptyMovieClip("conteneur1", 2);
var mclListener1:Object = new Object();
var mcl1:MovieClipLoader = new MovieClipLoader();
mcl1.addListener(mclListener1);
//MovieClip Conteneur2
var conteneur2:MovieClip = this.createEmptyMovieClip("conteneur2", 1);
var mclListener2:Object = new Object();
var mcl2:MovieClipLoader = new MovieClipLoader();
mcl2.addListener(mclListener2);   

//Chargement du fichier XML contenant la liste des photos
var diapo:XML = new XML();
diapo.ignoreWhite = true;
diapo.load("diapo.xml");
//Traitement une fois le chargement effectuer
diapo.onLoad = function(success:Boolean) {
    if(success){
        //Creation des noeud
        var noeudImage:XMLNode = this.firstChild.childNodes[0];
        var noeudParam:XMLNode = this.firstChild.childNodes[1];
        for (var i:Number = 0; i<noeudImage.childNodes.length; i++){
            var temp:Object = new Object();
            temp.titre = noeudImage.childNodes[i].attributes.titre;
            temp.comm = noeudImage.childNodes[i].attributes.comm;
            temp.xTxt = noeudImage.childNodes[i].attributes.xTxt;
            temp.yTxt = noeudImage.childNodes[i].attributes.yTxt;
            images.push(temp);
        }
        for (var i:Number = 0; i<noeudParam.childNodes.length; i++){
            var temp:Object = new Object();
            temp.valeur = noeudParam.childNodes[i].attributes.valeur;
            temp.comm = noeudParam.childNodes[i].attributes.comm;
            param.push(temp);
        }
        imageInit();
    }
}

imageInit = function(){
    if((param[0].valeur == "true")|(param[0].valeur == undefined)){
        imageActu = randomNum(0, images.length-1);
        imageNext = randomNum(0, images.length-1);
        imageRandom();
    }else{
        imageActu = 0;
        imageNormal();
    }
    if(param[1].valeur != undefined){timeStart = param[1].valeur;}
    if(param[2].valeur != undefined){timeBetween = param[2].valeur;}
    mcl1.loadClip(images[imageActu].titre, conteneur1);
    mcl2.loadClip(images[imageNext].titre, conteneur2);
}

mclListener1.onLoadComplete = function(target:MovieClip):Void {
    image1 = true;
    if(init){
        if(image2){
        init = false;
        interImage = setInterval(_root,"imageSwap",timeStart);
        }
    }else{
        conteneur2.swapDepths(conteneur1);
        mcl2.loadClip(images[imageNext].titre, conteneur2);
    }
}

mclListener2.onLoadComplete = function(target:MovieClip):Void {
    image2 = true;
    if(init){
        if(image1){
        init = false;
        interImage = setInterval(_root,"imageSwap",timeStart);
        }
    }else{
        interImage = setInterval(_root,"imageSwap",timeBetween);
    }
}

imageSwap = function(){
    clearInterval(interImage);   
    interAlpha = setInterval(this,"imageAlpha",6);
}

imageAlpha = function(){
    if(val_alpha < 100){
        conteneur1._alpha = (100-val_alpha);
        conteneur2._alpha = val_alpha;
        val_alpha += 1;
    }
    else{
        clearInterval(interAlpha);
        val_alpha = 0;
        imageActu = imageNext;
        if(param[0].valeur == "true"){
            imageRandom();
        }else{
            imageNormal();
        }
        conteneur1.swapDepths(conteneur2);
        conteneur1._alpha = 100;
        mcl1.loadClip(images[imageActu].titre, conteneur1);
    }
}

imageRandom = function(){
    while(imageActu == imageNext){
        imageNext = randomNum(0, images.length-1);
    }
}

imageNormal = function(){
    if(imageActu == images.length-1){
        imageNext = 0;
    }else{
        imageNext = imageActu+1;
    }
}

randomNum = function(min:Number, max:Number):Number{
    var num:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return num;
}

Fichier XML :

<?xml version="1.0" encoding="iso-8859-1"?>
<DIAPO>
    <LISTE nom='Liste images' comm='Liste des images.'>
       
       
       
       
           
           
           
           
           
           
           
           
           
           
    </LISTE>
   
        <RANDOM valeur='true' comm='Ordre des images'/>
        <TIME_START valeur='1000' comm='Tempo de démarrage'/>
        <TIME_BETWEEN valeur='4000' comm='Tempo entre les images'/>
   

</DIAPO>

3 réponses

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
25 avril 2007 à 17:02
Je viens d'essayer de mettre directement mon code Diapo dans mon anim principal. Ok sa marche... Mais je souhaiterai le placer dans un clip vide... mais là sa marche plus ! Merci de m'éclairer ! Je redonne le code :

//Création des variables
var images:Array = new Array();
var param:Array = new Array();
var imageActu:Number;
var imageNext:Number;
var annee:Date = new Date();
//Viariables des intervals
var interAlpha:Number;
var interImage:Number;
var interTest:Number;
//Temps de pause par défaut
var timeStart:Number = 1000;
var timeBetween:Number = 500;
//Variable pour la transition alpha
var val_alpha:Number = 0;
//Création des flags
var image1:Boolean = false;
var image2:Boolean = false;
var init:Boolean = true;

//MovieClip Conteneur1
var conteneur1:MovieClip = this.createEmptyMovieClip("conteneur1", 2);
var mclListener1:Object = new Object();
var mcl1:MovieClipLoader = new MovieClipLoader();
mcl1.addListener(mclListener1);

//MovieClip Conteneur2
var conteneur2:MovieClip = this.createEmptyMovieClip("conteneur2", 1);
var mclListener2:Object = new Object();
var mcl2:MovieClipLoader = new MovieClipLoader();
mcl2.addListener(mclListener2);   

this.onEnterFrame = function() {
        conteneur1._x = 100;
        conteneur1._y = 100;
        conteneur2._x = 100;
        conteneur2._y = 100;
        delete this.onEnterFrame;
}

//Chargement du fichier XML contenant la liste des photos
var diapo:XML = new XML();
diapo.ignoreWhite = true;
diapo.load("diapo.xml");
//Traitement une fois le chargement effectuer
diapo.onLoad = function(success:Boolean) {
    if(success){
        //Creation des noeud
        var noeudImage:XMLNode = this.firstChild.childNodes[0];
        var noeudParam:XMLNode = this.firstChild.childNodes[1];
        for (var i:Number = 0; i<noeudImage.childNodes.length; i++){
            var temp:Object = new Object();
            temp.titre = noeudImage.childNodes[i].attributes.titre;
            temp.comm = noeudImage.childNodes[i].attributes.comm;
            temp.xTxt = noeudImage.childNodes[i].attributes.xTxt;
            temp.yTxt = noeudImage.childNodes[i].attributes.yTxt;
            images.push(temp);
        }
        for (var i:Number = 0; i<noeudParam.childNodes.length; i++){
            var temp:Object = new Object();
            temp.valeur = noeudParam.childNodes[i].attributes.valeur;
            temp.comm = noeudParam.childNodes[i].attributes.comm;
            param.push(temp);
        }
        imageInit();
    }
}

imageInit = function(){
    if((param[0].valeur == "true")|(param[0].valeur == undefined)){
        imageActu = randomNum(0, images.length-1);
        imageNext = randomNum(0, images.length-1);
        imageRandom();
    }else{
        imageActu = 0;
        imageNormal();
    }
    if(param[1].valeur != undefined){timeStart = param[1].valeur;}
    if(param[2].valeur != undefined){timeBetween = param[2].valeur;}
    mcl1.loadClip(images[imageActu].titre, conteneur1);
    mcl2.loadClip(images[imageNext].titre, conteneur2);
}

mclListener1.onLoadComplete = function(target:MovieClip):Void {
    image1 = true;
    if(init){
        if(image2){
        init = false;
        interImage = setInterval(_root,"imageSwap",timeStart);
        }
    }else{
        conteneur2.swapDepths(conteneur1);
        mcl2.loadClip(images[imageNext].titre, conteneur2);
    }
}

mclListener2.onLoadComplete = function(target:MovieClip):Void {
    image2 = true;
    if(init){
        if(image1){
        init = false;
        interImage = setInterval(_root,"imageSwap",timeStart);
        }
    }else{
        interImage = setInterval(_root,"imageSwap",timeBetween);
    }
}

imageSwap = function(){
    clearInterval(interImage);   
    interAlpha = setInterval(this,"imageAlpha",6);
}

imageAlpha = function(){
    if(val_alpha < 100){
        conteneur1._alpha = (100-val_alpha);
        conteneur2._alpha = val_alpha;
        val_alpha += 1;
    }
    else{
        clearInterval(interAlpha);
        val_alpha = 0;
        imageActu = imageNext;
        if(param[0].valeur == "true"){
            imageRandom();
        }else{
            imageNormal();
        }
        conteneur1.swapDepths(conteneur2);
        conteneur1._alpha = 100;
        mcl1.loadClip(images[imageActu].titre, conteneur1);
    }
}

imageRandom = function(){
    while(imageActu == imageNext){
        imageNext = randomNum(0, images.length-1);
    }
}

imageNormal = function(){
    if(imageActu == images.length-1){
        imageNext = 0;
    }else{
        imageNext = imageActu+1;
    }
}

randomNum = function(min:Number, max:Number):Number{
    var num:Number = Math.floor(Math.random() * (max - min + 1)) + min;
    return num;
}
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
27 avril 2007 à 10:00
Hello,

ton animation externe fait référence à _root
interImage = setInterval(_root,"imageSwap",timeStart); par exemple...

Soit tu remplaces tous les _root par autre choses (essayer avec this)
Soit tu actives _lockroot sur le clip qui va charger ton animation externe
   -> en mettant this._lockroot=true au tout début du script externe
   -> ou alors en mettant container._lockroot=true avant de charger header.swf

@+
0
Mildek Messages postés 1 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 4 février 2009
4 févr. 2009 à 00:36
Bravo Girou !
problème résolu grâce à une toute petite ligne de code supplémentaire.
Je sais que ma réponse arrive tardivement par rapport aux messages précédents mais je suis tellement content d'avoir trouver une réponse à mon problème !
Bon code !
0
Rejoignez-nous