IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 1 & ActionScript 2 Discussion :

[FLASH 8] Problème utilisation MovieClipLoader


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut [FLASH 8] Problème utilisation MovieClipLoader
    salut,
    c'est un script pourcharger des images à partir d'un fichier xml.
    Le chargement est ok.
    Mais j'ai un souci dans la fonction makeStrip();
    Mes images ne se chargent pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    var path:String;
    var imgSrc:Array = new Array();
    var imgTitle:Array = new Array();
    var listen:Object = new Object();
    var mc:MovieClipLoader = new MovieClipLoader();
    mc.addListener(listen);
     
     
    function loadXml(dir:Number){
    ...
    }
     
    function makeStrip(){
    	for(var i:Number=0;i<imgSrc.length;i++){
    		var newMc:String = "mc" + i;
    		mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());	
     
    		listen.onLoadInit = function(){
    			this._x = 100;
    			this._height = 400;		
    			trace(this);			
    		}
    		mc.loadClip(path + imgSrc[i],newMc);
    	}
    }
     
    loadXml(2);

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 642
    Par défaut
    Essaye de modifier cette ligne:
    mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());
    par

    mc = createEmptyMovieClip(this[newMc],this.getNextHighestDepth());

  3. #3
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    j'ai essayé, mais pareil.
    Si j'ajoute 'trace(mc);' après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    _level0.mc0
    _level0.mc1
    _level0.mc2
    _level0.mc3
    _level0.mc4
    _level0.mc5
    _level0.mc6
    ...
    tous sont sur le level 0...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 642
    Par défaut
    Ce que tu veux ou pas?

  5. #5
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    Ce que tu veux ou pas?
    bah non, je veux pouvoir les voir sur ma scène simultanément, donc je pense qu'il faut qu'ils aient un niveau différent. Je pensais que ça serait le cas en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getNextHighestDepth()
    Est ce pour cela que mes images ne se chargent pas dans mes clips?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 642
    Par défaut
    Je sais pas, je suis pas un pro en flash, mais j'aurais fait ça:

    function makeStrip(){
    for(var i:Number=0;i<imgSrc.length;i++){
    var newMc:String = "mc" + i;
    mc = createEmptyMovieClip(this[newMc], i);

    listen.onLoadInit = function(){
    this._x = 100;
    this._height = 400;
    //trace(this);
    }
    mc.loadClip(path + imgSrc[i],newMc);
    }
    }

    loadXml(2);

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 642
    Par défaut
    Ce que j'ai changé finalement à ton code:

    mc = createEmptyMovieClip(this[newMc], i);

  8. #8
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    -le 2eme parametre de "loadClip" doit etre une occurence d'un MC existant et non une chaine
    -ensuite "loadClip" est une méthode de "movieClipLoader" et pas de "movieClip"
    -pour finir si le but est de charger des images en cascade, j'utiliserais plutot une fonction récursive, exemple extrait et adapté d'une classe qui me fait le taf de chargement en cascade pour gerer des "albums" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function chargerImg() {
    	if (nbIdImg > tbImg.length - 1) {
    		return;
    	}
    	var mc = this.createEmptyMovieClip("mcImg" + nbIdImg, nbIdImg);
     
    	mclTmp = new MovieClipLoader();
     
    	mclTmp.onLoadInit = function() {
    		trace("Chargement réussi de "+tbImg[nbIdImg]);
    		nbIdImg++;
    		// je rappelle cette fonction quand l'image précédente est chargé
    		// prévoir le coup en cas d'erreur apres X tentatives
    		chargerImg();
    	};
     
    	mclTmp.loadClip(stChemin + tbImg[nbIdImg], mc);
    }

  9. #9
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    salut,
    j'ai essayé de reprendre ton code, mais je dois dire que je n'ai pas encore perçé tous les mystères de l'AS2...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    class strip extends MovieClip{
        public var path:String;
        public var imgSrc:Array = new Array();
        public var imgTitle:Array = new Array();
    	public var container:MovieClip;
    	public var numImg:Number = 0;
    	public var mclTmp:MovieClipLoader;
    	public var listen:Object = new Object();
    	
        public function strip (dir:Number){
    		path = '../photos/' + dir + '/';
    		mclTmp.addListener(listen);
            loadXml();
        }
        
        public function loadXml(){
            var x:XML = new XML();
            x.ignoreWhite = true;
            var _this=this;
            x.onLoad = function(){
                var xmlResult:Array = this.firstChild.childNodes;
                for(var i:Number=0;i<xmlResult.length;i++){
                    _this.imgSrc.push(xmlResult[i].attributes.src);
                    _this.imgTitle.push(xmlResult[i].attributes.title);                
                }
                _this.chargerImg();
            }
            x.load(path + 'gallery.xml');
        }
        
    	
    	function chargerImg() {
    		trace('1- ' +  imgSrc.length);
    		trace('2- ' +  numImg);		
    		if (numImg > imgSrc.length - 1) {return;}
    		var mc = this.createEmptyMovieClip("mcImg" + numImg, numImg);
    		trace('3- ' +  mc);
    		var mclTmp = new MovieClipLoader();
    		trace('4- ' +  mclTmp);
    		mclTmp.onLoadInit = function() {
    			trace("Chargement réussi de "+imgSrc[numImg]);
    			numImg++;
    			chargerImg();
    		};
    	
    		mclTmp.loadClip(path + imgSrc[numImg], mc);
    	}
    }
    j'ai étendu ma classe avec MovieClip, est ce correct?
    les traces me renvoient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1- 14
    2- 0
    3- undefined
    4- [object Object]
    Pourquoi mc est undefined ?

  10. #10
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    j'ai completement modifié mon exemple pour qu'il ne ressemble plus a une méthodes et tu preferes tout integrer dans une classe ??
    si j'etais toi, avant d'aller aussi loin, je commencerais par tester une simple fonction récursive dans mon SWF en oubliant toutes les idées de classe externe car il y a pas mal de principe que tu ignores au niveau des classes, ex : this fait TOUJOURS référence a la classe, donc le :
    this.createEmptyMovieClip(.......
    ne peut pas fonctionner car tu cibles une classe et non un clip.

    commence par faire fonctionner quelque chose de simple pour bien comprendre avant de t'attaquer a plus gros car avec les classes tu te rajoutes une bonne dose de difficulté

  11. #11
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    j'ai completement modifié mon exemple pour qu'il ne ressemble plus a une méthodes et tu preferes tout integrer dans une classe ??
    oups désolé , en fait je suis plus habitué à php où je trouve le classes très partique. Je me disais qu'en c'est en essayant que je comprendrais mieux le classes en AS2. C'est en partie vrai, mais il me reste pas mal de chose encore... Enfin déjà, ce que tu as dit, que le this fait toujours référence à la classe est une info très précieuse... Est ce que tu connais des bons tutos sur les classes ou de bons bouquins pour AS2.

    sinon en suivant tes conseils, j'ai plutot fait avec des fonctions. Et ça marche (pas parfaitement mais c'est déjà mieux)

  12. #12
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    l'essentiel est de bien comprendre le principe avant de tout integrer dans des classes.
    pour les tutos, voici les + interessant.
    tout ce site : le principe de la POO est + ou - le meme pour tous les languages meme s'il peut y avoir des différences dans l'implementation des fonctionnalités (il parrait que les meilleurs en POO sont ceux qui ont commencés sur JAVA !?)
    [I]http://flash.developpez.com/cours/
    http://arnolem.developpez.com/flash/classes/

    et sinon :
    http://blog.lalex.com/
    http://www.tweenpix.net/blog/
    le site d'adobe
    et comme toujours l'aide de flash mais qui est tres limité ...

  13. #13
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    ok, je vais me pencher là dessus attentivement.
    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR 2008] Problème utilisation de composants flash
    Par bcgetpause dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 28/04/2008, 16h17
  2. Réponses: 10
    Dernier message: 21/03/2007, 09h54
  3. Réponses: 5
    Dernier message: 14/01/2006, 20h30
  4. [Flash MX] Problème d'ouverture d'URL
    Par n_tony dans le forum Flash
    Réponses: 2
    Dernier message: 07/04/2004, 16h13
  5. [Flash Mx] Problème de contour texte
    Par tahiti bob dans le forum Flash
    Réponses: 13
    Dernier message: 12/03/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo