Forums Développement Multimédia

Aller au contenu

Problème avec MovieClipLoader et boucle.

CODE Actionscript

10 réponses à ce sujet

#1 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 21 September 2007 - 17:16 PM

Bonjours!
Je fais une galerie photos et charge les différentes miniatures dans des clips spécifiques,
j'utilise un MovieClipLoader et onLoadInit pour vérifier si les miniatures ne dépassent pas un certain _height spécifique.

Les miniatures sont chargées à travers une boucle for, mais le problème est que uniquement la dernière miniature est verifiée et rectifiée, je suppose que cela vient de

Action Script

var ecouteurChargement:Object = new Object();

qui est effacé et réécrit à chaque boucle, le code concerné est :

Action Script

var mcl:MovieClipLoader = new MovieClipLoader();
var ecouteurChargement:Object = new Object();
ecouteurChargement.onLoadInit = function(success:Boolean) {
_root.cheight.text = Tn_0._height;
if (Tn_0._height>100.8) {
Tn_0._width = Tn_0._width*100.8/Tn_0._height;
Tn_0._height = 100.8;
}
};

J'ai essayer en fessant quelque chose du genre:

Action Script

var["ecouteurChargement"+i]:Object = new Object();
_root["ecouteurChargement"+i].onLoadInit = function(success:Boolean) {

Mais ca ne marche pas, quelqun à une idée?
Merci d'avance.

#2 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 22 September 2007 - 11:26 AM

salut,

il y a environ 10 000 000 de post qui parlent de ce sujet, (je sens que je me répète mais) bannis les _root... et en plus je ne vois pas du tout l'intéret d'avoir plusieurs écouteurs!!

#3 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 22 September 2007 - 18:56 PM

Il faut plusieurs écouteurs car il y a plusieurs images qui sont en chargement, et je voudrais que a la fin du chargement de chaque image, il sois vérifié si l'image dépasse une certaine taille(en pixels).

Je ne vois pas pourquoi tu me parle de _root, j'en utilise un juste pour changer la valeur d'un text, ca n'as rien a voir avec mon problème.

Je ne l'ai pas montrer dans mon code mais le tout est dans une boucle for():

Action Script

	for (var i = 0; i<Nbr_Images; i++) {
_root.Images_Loaded += 1;
_root.MinLoaded = true;
var Tn_0:MovieClip = _root.createEmptyMovieClip("Tn_0_"+i, _root.getNextHighestDepth());
var Tn_1:MovieClip = Tn_0.createEmptyMovieClip("Tn_1_"+i, Tn.getNextHighestDepth());
var mcl:MovieClipLoader = new MovieClipLoader();
var ecouteurChargement:Object = new Object();
ecouteurChargement.onLoadInit = function(success:Boolean) {
_root.cheight.text = Tn_0._height;
if (Tn_0._height>100.8) {
Tn_0._width = Tn_0._width*100.8/Tn_0._height;
Tn_0._height = 100.8;
}
};
_root["Tn_0_"+i].rank = i;
if (_root.cx == EcartX*Images_par_ligne) {
_root.cx = 0;
_root.cy += EcartY;
}
Tn_0._x = _root.cx;
Tn_0._y = _root.cy;
Tn_1._x = 0;
Tn_1._y = 0;
_root.cx += EcartX;
Tn_1._xscale = TN_Xscale;
Tn_1._yscale = TN_Yscale;
mcl.addListener(ecouteurChargement);
mcl.loadClip(_root.xmlDoc_Photos.firstChild.childNodes[i+_root.compteur_photos].attributes.mini, Tn_1);

est le code complet.

Mon problème est que je ne sais pas comment crée plusieurs écouteurs només en fonction de i dans ma boucle.

Modifié par anthrax, 22 September 2007 - 18:57 PM.


#4 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 22 September 2007 - 19:08 PM

juste comme ça des _root tu en a 14 pas 1 et déjà un c'est trop wink.gif

après le but du mcl et des ecouteur c'est justement de ne pas en avoir 10 000 pour charger 3 images donc 1 seul suffit.

après je part du principe, qui est peu être erroné, qu'un bon code c'est un ensemble et que lorsque il y a des trucs foireux de bases il faut les corriger avant de passer à la suite (même si ton code à première vue fonctionne).

#5 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 22 September 2007 - 19:16 PM

ha j'oubliais, regardes dans l'aide ça pourra t'aider aussi parce que onLoadInit ne reçois pas une booléen en paramètre mais un mc.

#6 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 22 September 2007 - 19:22 PM

Les _root me conviennent très bien, j'ai jamais eu de problème avec =)

Par contre ici mon problème est que uniquement la dernière image chargée semble affectée par:

Action Script

         ecouteurChargement.onLoadInit = function(success:Boolean) { 
_root.cheight.text = Tn_0._height;
if (Tn_0._height>100.8) {
Tn_0._width = Tn_0._width*100.8/Tn_0._height;
Tn_0._height = 100.8;
}
};

C'est pour ca que je supposais qu'il faillais crée plusieurs écouteurs...
Je ne vois vraiment pas d'où peut venir le problème alors.... Le fait que seul la dernière image soit affectée fais très fortement penser que les autres écouteurs soient à chaque fois effacer en se fessant ré-écrire dessus à travers la boucle.

#7 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 22 September 2007 - 19:26 PM

déjà c'est clair il ne faut pas mettre ni tes ecouteurs ni ton mcl dans la boucle


#8 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 22 September 2007 - 19:46 PM

En effet, c'est logique,

Action Script

var mcl:MovieClipLoader = new MovieClipLoader();
var ecouteurChargement:Object = new Object();
doivent être en dehors de la boucle.
Je les ais donc déclarés en dehors, mais le problème persiste, j'ai maintenant l'impression que c'est un problème de ciblage du clip contenant la photos chargée. J'utilise

Action Script

	ecouteurChargement.onLoadInit = function(target_mc:MovieClip) {
_root.cheight.text = Tn_0._height;
if (Tn_0._height>100.8) {
Tn_0._width = Tn_0._width*100.8/Tn_0._height;
Tn_0._height = 100.8;
}
};
pour corriger la taille de la photo, Tn_0 est une variable crée comme telle:

Action Script

var Tn_0:MovieClip = _root.createEmptyMovieClip("Tn_0_"+i, _root.getNextHighestDepth());
Dans la boucle, cette Tn_0 est donc re-écrite dessus à chaque cycle du for() donc si le .onLoadInit est en dehors de la boucle for(), chaque fois fois que une photos auras finis de se charger, le code vérifieras si la dernière photos( et pas celle qui vien de finir de se charger) correspond au critères de taille...
D'habitude j'accède à Tn_0 en fessant _root["Tn_0"+i], mais la je dois également mettre le code .onLoadInit en dehors de la boucle non?
Devrais je crée un .onLoadInit spécifique à chaque photos? comment incorporer ca ds la boucle?

Edit: Comment savoir quelle est le clip qui a finis de charger avec un onLoadInit?

Modifié par anthrax, 22 September 2007 - 19:51 PM.


#9 la pieuvre

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3055 messages

Posté 22 September 2007 - 20:37 PM

et a ton avis à quoi sert le paramètre target_mc?

#10 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 22 September 2007 - 23:13 PM

Donc je remplace "target_mc" par le nom du movieclip concerné?
Mais comment fais je pour désigner le movieclip dont le chargement vient de se finir? =o
J'ai rien trouver a ce sujet dans la documentation flash.

Merci de ton aide tout de même

#11 anthrax1327250115

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 163 messages

Posté 23 September 2007 - 23:53 PM

Muahahahaha!
J'ai finalement eu la révélation ce matin sous la douche!
target_mc est à utiliser dans la fonction, c'est directement ca qui désigne le movieclip qui vient de finir de se charger!
Oui, bon, ca à l'air évident comme cela, mais on sy perd vite dans les méandres de la programmation!

Merci La Pieuvre!



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)