[Flash] LoadMovie é Co

LoadMovie é Co [Flash] - Flash/ActionScript - Programmation

Marsh Posté le 09-09-2005 à 01:30:08    

Salut tout le monde,
Alors les loadMovies pour moi c'est l'enfer, et plein de monde pose des questions... j'esperais trouver la réponse dors-et-déjà sur le forum, mais sot que je suis, je me suis trompé :-)
 
j'ai donc un petit problème avec LoadMovie, en fait je vous explique la hiérarchie, j'ai une anim principale qui charge d'autres anims. jusque la ca baigne. J'aimerais par exemple que quand je clique sur un bouton dans le clip principal, ca me charge une autre anim (.swf).
 
j'ai tenté le code suivant :
 

Code :
  1. loadMovie ("mvt1.swf",50);
  2. loadMovie ("mvt2.swf",49);
  3. _level50.play();
  4. if(_level50.mvt2_play)
  5. {
  6. _level49.play();
  7. }


 
malheureusement, jai l'impression que les 2 anims se jouent en meme temps!!!
pourtant la variable mvt2_play dans le clip mvt1.swf est initialisée à fausse et passée a vrai sous certaines conditions (qui sont vérifées).
Donc je suppose que je me gourre fortement dans les LoadMovie, mais ou?
 
tiendez moi au courant les gens!
merci par avance!!
et bonne nuit tout le monde :sleep:  
Gian

Reply

Marsh Posté le 09-09-2005 à 01:30:08   

Reply

Marsh Posté le 09-09-2005 à 09:38:15    

mais un trace(this) dans mvt1.swf et regarde ce qui sort quand tu le load dans ton anim pincipale, je suis pas sur que ce soit: _level50


---------------
D3
Reply

Marsh Posté le 09-09-2005 à 11:18:31    

re,
merci de ta réponse,
mais pour tout ce qui est débuggage avec trace(), chez moi, je ne sais pas si ca bug ou quoi que ce soit, mais dans "Output" je n'ai jamais rien d'affiché, et je suis obligé de regarder les vars dans Debug > List Variables et Debug > List Objects.
en général je me contente de ca et ca marche.
mais la je peux pas te répondre... trace() ca trace que dalle chez moi :-)

Reply

Marsh Posté le 09-09-2005 à 11:23:20    

et oui, je confirme, je vois bien les 2 anims qui se jouent en meme temps, si j'inverse les levels c pareil (sauf que les calques ne sont plus au meme niveaux bien sur)

Reply

Marsh Posté le 09-09-2005 à 11:30:22    

je suppose que tu as pensé a mettre des stop(); dans les anims que tu importe (je demande au cas ou...)
le trace qui passe pas c'est du jamais vu, moi je serais complétement paumé sans trace ;-)
tu voudrait pas charger tes anims dans des MC ce serait plus propre non?

Code :
  1. _root.creatEmptyMovieCLip("anim1_mc",50);
  2. _root.anim1_mc.loadMovie("mvt1.swf" );
  3. _root.creatEmptyMovieCLip("anim2_mc",49);
  4. _root.anim2_mc.loadMovie("mvt2.swf" );


---------------
D3
Reply

Marsh Posté le 09-09-2005 à 11:39:16    

Oui je sais, le trace() c du jamais vu, mais chez moi j'ai déjà vu des tas de trucs extraordinaires (le gestion de mon fond d'écran à disparu (à cause de CWS je pense), il faut désactiver et réactiver certains protocoles (dont le client Novell) dans un certain ordre pour pouvoir jouer en IPX, et des tas de trucs comme ca. Et pourtant a prioris ma version de windows XP est super stable...). Mais passons, la n'est pas le sujet.
Moi aussi je suis paumé sans trace()... Alors je me démerde sans.
 
J'ai bien mis des stop(); un peu partout comme je le souhaitais. Donc je ne sais pas trop quoi faire en fait...
Je vais essayer ta suggestion, voir ce que ca donne!
merci!

Reply

Marsh Posté le 09-09-2005 à 11:47:12    

la je suis certainement une grosse quiche, mais y a rien qui s'affiche chez moi avec le code que tu m'as filé... faut-il que je rajoute quelque chose? un _visible? ou un truc du genre ? ou je que spécifie une taille ?
moi pas comprendre!

Reply

Marsh Posté le 09-09-2005 à 13:53:31    

normalement non:
http://livedocs.macromedia.com/fla [...] _ASLR.html
t'as Flash MX 2004 et tu publie en flashplayer 7 actionscript 2 ?
jvois pas bien ce qu'on peut essayer...
 
le reste de ton anim est chargé ?
(auquel cas, essaye dans un nouveau document)
 
sans trace() il m'est assez difficile de t'aider...
je peut peut etre telecharger ton .fla depuis quelque part pour voir ce que ca fait chez moi...


---------------
D3
Reply

Marsh Posté le 09-09-2005 à 18:02:54    

je suis sous FlashMX 2004 et je publie en flash7 je crois  AS2 je ne sais pas.
 
je t'envois un mp pour que tu jetes un oeil au .FLA
merci!
gian

Reply

Marsh Posté le 09-09-2005 à 20:50:33    

alors deja (et c'est de ma faute a tjrs taper de memoire sans faire gaffe a la casse..):
 

Code :
  1. _root.createEmptyMovieClip("anim1_mc", 50);
  2. _root.anim1_mc.loadMovie("mvt1.swf" );


 
le PB c'est que tant que l'anim serat pas chargé complétement _root.anim1_mc.stop(); ne sert a rien
 
du coups tu devrait voir du cote des MovieCLiploader:
http://livedocs.macromedia.com/fla [...] _ASLR.html
 

Code :
  1. _root.createEmptyMovieClip("anim1_mc", 50);
  2. var mclListener:Object = new Object();
  3. mclListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
  4.    partchargee = Math.round(bytesLoaded/bytesTotal*100);
  5. };
  6. mclListener.onLoadInit = function(target_mc:MovieClip) {
  7.    target_mc.gotoAndStop(1);
  8. };
  9. var anim_mcl:MovieClipLoader = new MovieClipLoader();
  10. anim_mcl.addListener(mclListener);
  11. anim_mcl.loadClip("anim1.swf", anim1_mc);


 
je te laisse essayer de ce cote la pendant le week-end ;-)


---------------
D3
Reply

Marsh Posté le 09-09-2005 à 20:50:33   

Reply

Marsh Posté le 09-09-2005 à 22:23:17    

oki merci beaucoup je vais tenter tout ca :-)

Reply

Marsh Posté le 10-09-2005 à 13:29:35    

Bon, je m'y suis mis avec les MCL et ca marche correctement... voici le code (merci l'aide de FLash) :
 

Code :
  1. this.createEmptyMovieClip("progressBar_mc", 0);
  2. progressBar_mc.createEmptyMovieClip("bar_mc", 1);
  3. progressBar_mc.createEmptyMovieClip("stroke_mc", 2);
  4. with (progressBar_mc.stroke_mc) {
  5. [blabla....]
  6. }
  7. with (progressBar_mc.bar_mc) {
  8. [blabla...]
  9. }
  10. var mclListener:Object = new Object();
  11. mclListener.onLoadStart = function(target_mc:MovieClip) {
  12.    progressBar_mc.bar_mc._xscale = 0;
  13. };
  14. mclListener.onLoadProgress = function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
  15.    progressBar_mc.bar_mc._xscale = Math.round(bytesLoaded/bytesTotal*100);
  16. };
  17. mclListener.onLoadComplete = function(target_mc:MovieClip) {
  18.    progressBar_mc.removeMovieClip();
  19.    gotoAndStop(2);
  20. };
  21. mclListener.onLoadInit = function(target_mc:MovieClip) {
  22. };
  23. this.createEmptyMovieClip("mvt1_mc", 100);
  24. var mvt_mcl:MovieClipLoader = new MovieClipLoader();
  25. mvt_mcl.addListener(mclListener);
  26. mvt_mcl.loadClip("mvt1.swf", mvt1_mc);


 
je n'ai posté que les grandes lignes. ca marche bien.
 
Maintenant le fait que j'utilise un MCL pour charger un clip, change la hiérarchie. Donc j'ai du enlever les _root que j'avais dans le clip chargé sinon ah bah marche plus.
mais j'ai un autre problème, je faisait un appel _root.gotoAndStop(26) dans un bouton dans un clip contenu dans le clip qui est chargé par le MCL ... compliqué non ?
Je vous fait un petit schéma :
 
MCListener-->MCLoader ("mvt1_mc" charge donc mvt1.swf)
                                        |-->dans mvt1.swf (*1) : un mc_  
                                                          |-->dans ce mc_anciennement _root.gotoAndPlay(x);
 
ma question est, que dois-je mettre a la place du _root. pour pouvoir faire un gotoAndPlay(x) dans le clip "mvt1.swf". Je précise bien que ce gotoAndPlay est géré par le sousclip et non pas par le superclip qui utilise le MCLoader. En fait je veux revenir a la "racine" du sous-clip (*1).  
 
Voila, j'espere que j'ai été clair, sinon n'hesitez pas à me demander les gens!
bon we!
gian

Reply

Marsh Posté le 10-09-2005 à 18:59:02    

euh!
la encore dommage que t'est pas trace !
resumons: tu veut que le timeline principal de mvt1.swf aille lire a partir de la frame 26, ceci commandé par un bouton situé a l'interieur de celle ci...
-> peut etre que _root.mvt1_mc.gotoAndPlay(26); fonctionne (logiquement ca devrait ;-) )


---------------
D3
Reply

Marsh Posté le 11-09-2005 à 13:07:38    

oui ca semble fonctionner! (en tout cas pour l'animation ca marche).
la j'ai un autre probleme (décidemment), sans doute de portabilité de variables...
Je m'explique, je fais des mouvements de caméras entre 2 keyframes, ou apparait un MC avec des boutons dedans. Quand je me cantonne à un mouvement aller - retour ca marche bien. mais quand je cherche à faire aller la caméra 2 fois plus loin, je peux y aller, mais je peux revenir qu'une fois... la je comprends pas tout...
je vais poster le code ce sera sans doute plus simple :
 
[Frame 25] :

Code :
  1. stop();
  2. ________________Dans le MC, boutton :
  3. on(release)
  4. {
  5. _root.mvt1_mc.exit=false;
  6. _root.mvt1_mc.gotoAndPlay(26);
  7. }


 
[frame 26->58] :

Code :
  1. onEnterFrame = function() {
  2.     if (!exit && _currentframe<58) {
  3.         nextFrame();
  4.     }
  5. else if (exit && _currentframe>25)
  6. {
  7.        prevFrame();
  8.     }
  9. }


 
[frame 59] !

Code :
  1. stop();
  2. ________________Dans le MC, boutton "Droite":
  3. on(release)
  4. {
  5. _root.mvt1_mc.exit=true;
  6. _root.mvt1_mc.prevFrame();
  7. }
  8. ________________Dans le MC, boutton "Gauche":
  9. on(release)
  10. {
  11. _root.mvt1_mc.exit=false;
  12. _root.mvt1_mc.gotoAndPlay(59);
  13. }


 
j'ai le meme code sur pratiquement tout le reste de l'anim, mis à part pour les frames dont le numéro change, bien évidemment.
Quand je reste entre les frames 25->59, pas de problemes, je peux faire des aller retours ca marche d'enfer.
mais par exemple quand je vais plus loin, 25->59->91 et que je reviens 91->59->fait juste 1 seul PrevFrame()! et tout stop.
 
Sachant que cette animations, est sous-classée par rapport à une super animation.
La sans trace() je galère, impossible de débugger...
une suggestion sir mechkurt? (vu que tu es le seul à répondre!)
merci!
et bon WE,
gian

Reply

Marsh Posté le 11-09-2005 à 14:14:17    

c'est toujours un peu difficile de rentrer dans le code de qq'un sans l'avoir sous les yeux...
 
deja je trouve qu'il y a doublon entre ca:

Code :
  1. _root.mvt1_mc.gotoAndPlay(26);


et ca:

Code :
  1. if (!exit && _currentframe<58) { 
  2.         nextFrame();       
  3. }


logiquement, non seulement il lit l'animation frame apres frame, mais en plus a chaque fois il saute a la frame suivante
 
alors soit tu fait confiance a ton code onEnterFrame et tu fait:

Code :
  1. _root.mvt1_mc.gotoAndStop(26);


soit tu allege ton onEnterFrame de la partie "lecture dans le bon sens"
Je ne suis pas sur que le PB viennent de la quoique ca expliquerait qu'il fonctionne dans quand il lit a l'endroit mais pas quand il lit a rebours...
 
A part ca il ne peut y avoir qu'un seul onEnterFrame par clip, donc a chaque fois que tu declare:

Code :
  1. onEnterFrame = function() { 
  2.      if (!exit && _currentframe<58) { 
  3.          nextFrame();       
  4.      } else if (exit && _currentframe>25)  { 
  5.          prevFrame();                       
  6.      }
  7. }


c'est comme si tu declarais:

Code :
  1. _root.mvt1_mc.onEnterFrame = function() { 
  2.      if (!_root.mvt1_mc.exit && _root.mvt1_mc._currentframe<58) { 
  3.          _root.mvt1_mc.nextFrame();       
  4.      } else if (_root.mvt1_mc.exit && _root.mvt1_mc._currentframe>25)  { 
  5.          _root.mvt1_mc.prevFrame();                       
  6.      }
  7. }


le code compris entre la frame 60 et 90 ecrasant celui qui a été déclaré entre la frame 26 et 58
 
bonne chance
PS: je t'ai dit que je trouvais ton anim tres joli et tres lourde ;-)


---------------
D3
Reply

Marsh Posté le 11-09-2005 à 14:22:04    

ouaip je sais! :-)  mais pour l'instant c du test je supprimerais ptet un calque ou 2 qui bouffent pas mal (les ombres notemment).
je vais essayer de voir avec ton code hector :-)

Reply

Marsh Posté le 18-09-2005 à 15:18:17    

Bon et bien ca marche bien, j'arrive a piloter l'anim comme je veux.
 
Maintenant je suis passé au chargement des fichiers via le MCL comme d'hab, et la grosse surprise, il charge 2% et il lance l'animation. C'est la fête!  :D  
 
j'ai comme l'impression qu'il compare la taille de la "super" animation a celle qui est chargée par le MCL :
anim mvt1 = 12 Mo
superanim = 26 ko
 
La superanim represente environ 2% de mvt1...... donc surprise surprise.
 
voici le code :
 

Code :
  1. this.createEmptyMovieClip("mvt1_mc", 1);
  2. var mclListener:Object = new Object();
  3. mclListener.onLoadInit = function(mvt1_mc:MovieClip) {
  4. };
  5. mclListener.onLoadStart = function(mvt1_mc:MovieClip) {
  6.         preloader._visible = true;
  7.         preloader.loadBarFull._width=0;
  8. };
  9. mclListener.onLoadProgress = function(clip, w, t) {
  10.         var w = clip.getBytesLoaded();
  11.         var t = clip.getBytesTotal();
  12.  preloader.loadBarFull._width=Math.round(w*200/t)
  13.         preloader.percent.text = Math.round(w/t*100);
  14. };
  15. mclListener.onLoadComplete = function(mvt1_mc:MovieClip) {
  16.         preloader._visible = false;
  17.         preloader.percent.text = "";
  18. };
  19. mclListener.onLoadError = function(mvt1_mc:MovieClip, errorCode:String) {
  20.         preloader._visible = false;
  21.         preloader.percent.text = "";
  22. };
  23. var myLoader:MovieClipLoader = new MovieClipLoader();
  24. myLoader.addListener(mclListener);
  25. myLoader.loadClip("mvt1.swf",mvt1_mc);


 
je galere la dessus depuis 2 jours, impossible d'avancer...
merci a tout ceux qui peuvent me filer un coup de main!
gian

Reply

Marsh Posté le 19-09-2005 à 08:47:40    

t'as essayé de mettre un clip.gotoAndStop(1); (dans loadstart par exemple)
ou plus simplement un stop(); sur le premiere frame de ton anim de 12 mega


---------------
D3
Reply

Marsh Posté le 19-09-2005 à 11:33:49    

euh ... non,
je pensais que la lecture s'effectue qu'a partir du moment ou on rentre dans le init ou Complete...
vais essayer ca right now!
merci mercure

Reply

Marsh Posté le 19-09-2005 à 11:35:59    

autant pour moi!!
ca marche parfaitement comme ca!
merci meche kurt cobain

Reply

Marsh Posté le 19-09-2005 à 11:36:46    

a vrai dire j'en sais rien mais d'une certaine facon il stream peut etre l'anim, les frame chargé étant affiché...


---------------
D3
Reply

Marsh Posté le 19-09-2005 à 17:18:09    

ok merci quand meme :)
 
As-tu une idée de la meilleur facon de charger plusieurs clips avec un seul listener ?
Car dans une seule et meme frame, la barre de chargement lit les 2 fichiers en meme temps, donc, comment faire un chargement de fichiers séquentiel?  
 
J'ai pensé a les séparer avec des keyframes, ou à charger le MCL du 2eme dans le onLoadComplete() du premier :
dans ce style la :
 

Code :
  1. mclListener.onLoadComplete = function(mvt1_mc:MovieClip) {
  2.         myLoader.loadClip("mvt2.swf",mvt2_mc);
  3. };


 
mais je trouve que ca fait un peu bordélique.
De plus quand je lance le truc ca marche mais j'ai un message qui s'affiche au bout de plusieurs secondes me disant que mon script ralentit l'animation! hem...
ce qui me fait penser qu'il y a une bien meilleur méthode pour tout ca.
J'ai parcouru les sites web (notamment Kirupa) mais j'ai pas trouvé d'exemple qui tue. Sur le site de Flash, ils balancent leur sauce joyeusement avec 3/4 MCL, mais si je fais pareil ca lit tout simultanément...
 
merci!
gian

Reply

Marsh Posté le 19-09-2005 à 17:43:37    

ca parait effectivement un peu barbare...
met plutôt une condition, je te donne des pistes:

Code :
  1. trucacharger = new Array("mvt1.swf","mvt2.swf" );
  2. numero=0;
  3. _root.onEnterFrame = function () {
  4.    if (charge) {
  5.       if (numero>trucacharger.length) {
  6.          //tous les chargements sont finis je passe a autre chose
  7.          //et surtout je supprime le_root.onEnterFrame qui ne sert plus a rien
  8.          delete _root.onEnterFrame;
  9.       } else {
  10.          //je charge le prochain truc sur la liste
  11.          myLoader.loadClip(trucacharger[numero],icilenomd'unnouveaumovieclip);
  12.       }
  13.    }
  14. }
  15. mclListener.onLoadComplete = function() {
  16.      charge=true;
  17.      numero++;
  18. };


---------------
D3
Reply

Marsh Posté le 19-09-2005 à 17:56:20    

ok merci,
je vois le truc, ca devrait marcher sans problemes.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed