Pb Chargement zones dynamiques undefined

Pb Chargement zones dynamiques undefined - Flash/ActionScript - Programmation

Marsh Posté le 12-11-2007 à 00:27:55    

Voila, je fais une banniere (donc petite animation simple en une centaine de frames) dont les objets (zones de texte et images) sont chargees depuis un xml. Voila comment je procede :
 
frame 1 : chargement du fichier xml, donnees stockees dans des tableaux
frame 2 : contient un movieclip (la banniere en question) qui elle contient : des zones de textes dynamiques et un autre movieclip qui anime une image (celle ci egalement chargee depuis le xml)
 
Mon probleme arrive. Je ne sais pas ou placer les affectations de mes données contenues dans les tableaux dans les zones dynamiques... on dirait que tant que la tete de lecture ne passe pas sur la frame contenant l'objet dynamique, cette zone dynamique reste à undefined. Tu me suis ? C'est à dire que, quelque soit l'endroit où je place l'affectation, cela ne marche que si c'est fait au moment même où la zone dynamique apparait.  
 
Ne puis je pas, par le code, faire :
 
movieclip.zonedynamique.text = tableau[0] partout, même si la movieclip.zonedynamique.text n'est pas encore jouée ?
 
Voici le code (ne riez pas trop fort lol) et ce n'est pas de l AS2  ;)  
 
1ere frame du _root:
 

Code :
  1. stop();
  2. var lien:String;
  3. var titres:Array = new Array();
  4. var teasers:Array = new Array();
  5. var textes:Array = new Array();
  6. var liens:Array = new Array();
  7. var couvs:Array = new Array();
  8. var epubs:Array = new Array();
  9. myXML = new XML();
  10. myXML.ignoreWhite = true;// Pour ignorer les blancs dans le .xml
  11. // code du bouton
  12. _root.epub_mc.myBtn_btn.onRelease = function() {
  13. getURL(lien, "_blank" );
  14. };
  15. myXML.onLoad = function(ok) {
  16. if (ok) {
  17.  epubs = this.firstChild.childNodes;
  18.  // on charge toutes les données dans des tableaux
  19.   titres.push(epubs[0].childNodes[0].attributes.value);
  20.   teasers.push(epubs[0].childNodes[1].attributes.value);
  21.   textes.push(epubs[0].childNodes[2].attributes.value);
  22.   liens.push(epubs[0].childNodes[3].attributes.url);
  23.   couvs.push(epubs[0].childNodes[4].attributes.url);
  24.   lien = liens[numepub];
  25.   gotoAndPlay(2);
  26. } else {// message d'erreur si le xml est introuvable
  27. }
  28. };
  29. myXML.load("fichier.xml" );


 
 
1ere frame du movieclip contenu sur la deuxieme frame du _root :
 

Code :
  1. var numepub = 0;
  2.     _root.epub_mc.couv.couv.loadMovie(_root.couvs[numepub]);
  3. _root.epub_mc.titre_mc.titre.text = _root.titres[numepub];
  4. _root.epub_mc.teaser_mc.teaser.text = _root.teasers[numepub];
  5. _root.epub_mc.texte_mc.texte.text = _root.textes[numepub];


 
Pour vous redire mon pb, les objets contenus dans mon movieclip (titre_mc.titre par exemple) n'affichent les bonnes valeurs que s'ils sont là dès la 1ere frame.  Je comprends que flash ne trouve pas ces zones puisquelles ne sont pas encore lues au moment où je lui demande de leur affecter des valeurs. Mais comment faire ?!?

Reply

Marsh Posté le 12-11-2007 à 00:27:55   

Reply

Marsh Posté le 12-11-2007 à 04:00:02    

Faire un loading pour un xml qui va surement pas depasser 1ko :/ c'est franchement inutile.
Donc mets tout sur la 1ere frame de ta scene et c'est bon.
Et mets toutes tes donnes dans UN seul tableau aussi.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 12-11-2007 à 12:27:31    

Bah.... en fait ca résout pas mon probleme....
 
Ou alors je mets mes zones des la 1ere frame et je les fait disparaitre en alpha=0 qd je ne veux pas les voir mais... c est franchement bizarre non ?
 
Bon j'ai fait ca et ca marche.... alors voila, mais je suis un peu decue.... c'est crado comme facon de faire me semble t il.


Message édité par sarahz le 12-11-2007 à 12:35:11
Reply

Marsh Posté le 12-11-2007 à 12:31:15    

Montres ton nouveau code ...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 12-11-2007 à 12:35:40    

bah le code n a pas changé, ce qui a changé c est la position des zones de textes dynamiques sur la timeline

Reply

Marsh Posté le 12-11-2007 à 13:18:33    

Oue pardon je suis un peu creuvé :D

 

Non c'est pas vraiment crade, c'est juste une question d'organisation.
Sinon il faut temporiser avec des setInterval ou des dispatchEvent, c'est ce qu'il y a de mieux ...


Message édité par Zedlefou le 12-11-2007 à 13:19:13

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 12-11-2007 à 14:03:57    

je fais un truc pour bosser sur des projets comme ça avec des graphistes :  
je passe tous les textes en _global.texte1 = "salut" // --> je fais ça dynamiquement quand je parse le XML
après dans le champ variable d'une zone texte, t'as plus qu'a mettre _global.texte1 et le texte se met tout seul
 
 
sinon, tu peux pas affecter du texte dans des champs qui ne sont "pas encore apparus" au moment de l'affectation.. en gros tu peux pas coller un texte dans un champ qui apparait pas avant l'image 50...
 
ce qu'il faut faire c'est que tu met du code a l'image 50 et tu fais monChampTxt.text = textes[4]

Reply

Marsh Posté le 12-11-2007 à 15:46:19    

ok, merci !  
Finalement j'ai fait apparaitre tous mes objets des le depart, et je les cache avec l'alpha, parceque, comme ca n arrete pas de clignoter, bouger etc... j ai pas envie de refaire a chaque fois les affectations. Mais ca doit pas etre terrible pour l'optimisation (c'est nul je suis obligee de charger plusieurs fois la meme image des le debut) mais bon... sinon je testerais le truc de la variable c est peut etre mieux ca pour mes textes.
 
Merci !!!

Reply

Marsh Posté le 12-11-2007 à 16:04:33    

Heu si tu cherches a optimiser, n'utilise pas les variables de textes, c'est juste une solution de facilité (et encore).
 
Et sinon, pourquoi tu charges plusieurs fois la meme image ?


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 12-11-2007 à 16:38:57    

L anim utilise une image. Je l'ai mise dans un movie clip image (couv_mc).
ce qu il y a, c est que, ce movie clip, je l utilise plusieurs fois dans mon anim, j'avais créé plusieurs movieclip, chacun utilisant couv_mc à l'interieur. Ce dont je me suis apercue, c'est que lorsque j'affecte mon image, je l'affecte à une occurence de movieclip, et non à un symbole movie clip de ma biblio.
Donc, je suis obligee de faire les affectations pour chaque clip utilisant couv_mc... Tu me suis ?

Reply

Marsh Posté le 12-11-2007 à 16:38:57   

Reply

Marsh Posté le 12-11-2007 à 17:33:09    

Ok, je te suis ...  
En fait c'est surtout un probleme d'architecture dans ton appli.
C'est marrant comme je me rend compte que les debutants ont tendances a ce compliquer la vie pour eviter de faire du code :D
 
Au moment ou tu charges ton image, tu crees un movieClip vide et tu la colles dedans.
Par exemple  
var ref:MovieClip = this.createEmptyMovieClip("ref", this.getNextHighestDepth())
ref.loadMovie(monImage);
 
Et ensuite tu utilises 'ref' comme tu veux. Tu ne le charges qu'une fois et c'est beaucoup plus souple et propre.
 
Evidement ca change du WYSIWYG, mais bon ...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 12-11-2007 à 18:38:17    

Ouais mais cela impliquerait que j anim mon image uniquement par le code par la suite... ? Quand tu dis "après tu l'utilises partout"... c'est par le code uniquement ? Mettons que mon image arrive en tournant (chose que j'ai faite à la main, image par image), pour faire ça avec ta méthode, je vais devoir utiliser la class tween sur mon movieclip j'imagine... je ne peux pas le faire en WYSIWYG.. J'aimerais bien mais hélas, je n'en suis pas encore là.... peut etre que quand Flash CS12 sortira j'y arriverais ;)

Reply

Marsh Posté le 12-11-2007 à 22:12:15    

ce que tu peux faire c'est :
un movie clip de la taille de ton image mais avec juste une couleur par exemple
ton movieClip s'appelle monMC
 
après au lieu de faire :
 
var ref:MovieClip = this.createEmptyMovieClip("ref", this.getNextHighestDepth())
 
tu fais  
 
var ref:MovieClip = this.monMC.createEmptyMovieClip("ref", this.getNextHighestDepth())
 
 
en gros au lieu de charger ton image sur la scene (this) tu la charge dans un movieclip (monMC) qui est sur la scene (this)
 
tu peux alors bouger le clip comme tu veux en WYSIWYG, une fois que tu vas exporter, ton image va se charger dans le clip monMC... et bouger en meme temps que le clip (normal vu qu'elle est dans ce clip)
 
/!\ ATTENTION : il faut attendre que l'image soit totalement chargée avant de lancer les mouvements de monMC, sinon l'image ne se chargera pas bien  
 

Reply

Marsh Posté le 13-11-2007 à 03:41:06    

>>Quand tu dis "après tu l'utilises partout"... c'est par le code uniquement ?

 

Oui. Tu le positionnes avec _x et _y. Tu peux l'animer avec des onEnterFrame ou des setInterval etc ... Et la classe tween bien sur qui contrairement a ce que tu sembles croire est tres facile a utiliser.

 

>>en gros au lieu de charger ton image sur la scene (this) tu la charge dans un movieclip (monMC) qui est sur la scene (this)

 

Non non :o T'as pas compris mon exemple hein ...
Ca cree un clip 'ref' et ca load l'image dedans.
Toi tu crees un clip dans un clip, je vois pas du tout l'interet.

Message cité 1 fois
Message édité par Zedlefou le 13-11-2007 à 03:42:03

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 13-11-2007 à 08:39:07    

Zedlefou a écrit :

>>Quand tu dis "après tu l'utilises partout"... c'est par le code uniquement ?

 

Oui. Tu le positionnes avec _x et _y. Tu peux l'animer avec des onEnterFrame ou des setInterval etc ... Et la classe tween bien sur qui contrairement a ce que tu sembles croire est tres facile a utiliser.

 

>>en gros au lieu de charger ton image sur la scene (this) tu la charge dans un movieclip (monMC) qui est sur la scene (this)

 

Non non :o T'as pas compris mon exemple hein ...
Ca cree un clip 'ref' et ca load l'image dedans.
Toi tu crees un clip dans un clip, je vois pas du tout l'interet.

 

ce que je lui proposai, s'il n'est pas a l'aise avec les tween (en passant, ne surtout pas utiliser les tween intégré a flash, c'est tres mal fout, tres lourd au niveau poid, lourd a utiliser... ) c'est de faire ses interpolations à la main sur un movie clip (ses rotation, ses déplacements... avec un clip "recepteur" (monMC) qui va recevoir l'image...
s'il veux faire bouger son image avec un guide déplacement, il va pas allez loins avec des tweens...

 

sinon, t'inquiètes pas, j'ai bien compris ton exemple... :d


Message édité par alpseb le 13-11-2007 à 08:41:45
Reply

Marsh Posté le 13-11-2007 à 08:48:12    

De toute facon pour les anims c'est Zigo Engine Powa :o


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 13-11-2007 à 10:11:36    

Zedlefou a écrit :

De toute facon pour les anims c'est Zigo Engine Powa :o


 
j'aime bien tweener moi
Zigo sur un gros projet pas de problème mais c'est quand même assez lourd (en Ko)

Reply

Marsh Posté le 13-11-2007 à 10:49:24    

Oue pour une banniere c'est moyen, c'est sur.
En meme temps, dans les bann tu fais rarement voler des oiseaux. C'est plutot du slide.


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 13-11-2007 à 11:28:06    

Zedlefou a écrit :

Oue pour une banniere c'est moyen, c'est sur.
En meme temps, dans les bann tu fais rarement voler des oiseaux. C'est plutot du slide.


 
yes

Reply

Marsh Posté le 13-11-2007 à 19:39:09    

Au passage, je suis une fille, on préferera donc "elle", ;)
 
Merci beaucoup pour votre aide en tout cas. Ca m'encourage à continuer. Merciii !

Reply

Sujets relatifs:

Leave a Replay

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