|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Bonjour, sur ma scène j'ai différentes images qui se chargent et se redimenssionnent pour apparaitre en vignette. J'ai fait ce code :
Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
D'accord, j'ai déclaré l'alpha en disant :
Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Y'a plusieurs problèmes dans ce que tu as écrit.
Pour ton erreur: Cette ligne n'a pas de sens... ++ c'est un incrément, c'est à dire que tu ajoutes 1, et += est une addition, tu ajoutes une valeur. Les deux lignes suivantes sont valides, mais pas la tienne: Code :
Si tu veux être à 0 en début de chargement et à 100 en fin, il faut que tu codes un truc du genre: Code :
target_mc._alpha = 100*bytesLoaded/bytesTotal; En fait, ton image ne peut pas être affichée par Flash tant que toutes les données n'on pas été chargées... ce qui va se passer avec un code comme tu l'écris, c'est que ton clip va être transparent avec un alpha qui augmente, mais rien dans le clip, tu ne verras donc rien, et au moment où l'image sera complètement chargée, elle s'affichera, et ton alpha sera justement à ce moment là à 100. Tu va donc ne rien voir durant le chargement, et ton image va apparaître d'un seul coup à 100%. En gros, ce que tu veux faire n'est pas possible. La seule chose que tu puisses faire, c'est que rien ne soit affiché pendant le chargement, et qu'à la fin du chargement tu fasses apparaître l'image avec un fondu de 0 à 100% d'alpha en quelques secondes. Mais tu auras donc bien un temps au début où rien ne sera affiché. Libre à toi alors, pendant ce temps, de faire une anim quelconque d'attente, mais qui n'utilise pas l'image en cours de chargement. |
||
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Ok j'ai compris ce que tu veux dire. Par exemple je pourrais faire une feinte et afficher une miniature de l'image qui va se charger, miniature qui apparait lorsque le chargement commence, passe de alpha 0 à alpa à 100, puis disparait lorsque l'image est completement chargée, c'est ça ? du genre
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Oui, ça peut être une solution. Soit ta miniature est dans la bibliohèque de ton FLA, soit il va falloir aussi la charger. Mais si elle est petite, son chargement sera rapide.
Essaye un code, et si ça marche pô, renvoie-le Bonne chance ! |
|
|
00
|
|
|
#7 | ||
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Alors j'ai pas perdu de temps. Voici où j'en suis. J'ai une scène qui va charger différentes images, lesquelles vont donc se redimmensionner en vignette dans un premier temps, puis s'agrandir par tween en cliquant dessus. Pendant le chargement, j'ai une vrai vignette de l'image (chargée dans la bibliothèque) qui doit passer de alpha 0 à alpha 100 en fonction du chargement de l'image. Mes vignettes s'apellent Thumb1, Thumb2 ... et les images à charger image01, image02 ... Dans le code qui suit, tout fonctionne, mes images se chargent, mais les vignettes, qui sont définies à alpha 0 au chargement de la page, reste à 0 et ne se modifient pas ...
Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
harf... c'est pas très académique comme code... je regarde
|
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Humm... trop de trucs à dire, il est tard. J'ai commencé à te faire une grosse explication, je termine demain matin.
|
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
|
|
|
00
|
|
|
#11 | ||||||||||||||||||||
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Bon... alors, tant de choses à dire:
D'abord un conseil. Tu codes mi-chemin AS1/AS2. En plus on va vers l'AS3 qui exige que les données soient typées. Je te conseille donc de prendre l'habitude de systématiquement déclarer tes variables avec var et le type: Code :
Code :
var mcl:MovieClipLoader = new MovieClipLoader(); Ensuite, il faut éviter ce genre d'énumération: Code :
Code :
tu prends la partie droite du nom, c'est à dire le deuxième élément du tableau: et tu caste pour obtenir une valeur numérique: Code :
var subIndex:Number = Number(target.name.split("_")[1]); Une solution bien meilleure est d'utiliser l'argument target qui est passé à ta fonction, et de récupérer l'index dans le nom: Code :
Code :
Pour la suite, si tu regardes bien, tu appelles placement() à chaque lancement d'un chargement. Et placement repositionne tous les clips. C'est pas terrible, ça fait beaucoup de boulot pour rien. Alors le mieux, dans ton cas, est de passer en argument à placement() le clip, et la valeur index, comme ça tu ne repositionnes que le clip concerné: Code :
Ainsi placement(), ne place effectivement que le clip qu'il est nécessaire de classer et pas 10 ou 100 ou 200 clips à chaque fois. Si au final tes positions ne sont pas des proportions de l'index (ce qui risque fort d'arriver), tu pourrais enregistrer ces positions dans des tableaux (au même niveau que index et total): Code :
Code :
Code :
On compte donc à partir de 0 pour que ça concorde. Si total=6, et que 5<6, tu as les images 0, 1, 2, 3, 4, 5 ce qui fait bien 6 images. Enfin, j'ajoute que quand on débute, on a tendance à mettre des variables globales partout. Ce qui est pas une bonne pratique, car tu finis par te retrouver avec douze mille variables ingérables. Total risque de te servir plus loin dans le programme (gestion des vignettes), mais pas index qui n'est là que pour charger. On va donc éviter index. Et puis on va appeler total, totalImage, parce que des total, tu risques d'en avoir d'autres genre totalScore... donnes des noms plus exaustifs. On va donc passer l'index à charger en argument à load(). Et dans initialisation(), si un nouveau chargement doit être lancé, on le fera en identifiant l'index du dernier élément chargé à partir de son nom: Code :
Un code possible est celui-ci: Code :
("00").substr(0, 2-aIndex.toString().length) Code :
("0000").substr(0, 4-aIndex.toString().length) Pour terminer, pour une raison que j'ignore, j'ai constaté que le rootage vers les thumb avec this ne marche pas dans certains cas... il faut mettre le chemin à partir de _root. Je ne comprends pas pourquoi. Donc, comme mes thumb sont posé sur la scène, j'ai changé dans le code tous les this par des _root. Mais si pour toi ils sont pas sur la scène, note _root.nomContainer.nomSousContainer[thumb_"... Je fais un autre thread pour conclure, parce que ça devient long... |
||||||||||||||||||||
|
|
00
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
J'ai créé 4 images nommées Image_00.jpg, Image_01.jpg etc...
J'ai positionné 4 vignettes sur la scène nommées thumb_1, thumb_2 etc... Le code est: Code :
Allez, raconte moi ce que ça a donné |
||
|
|
00
|
|
|
#13 | ||
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Ha ben oui... ça me tracassait... erreur de newBe, c'est de la POO de base...
onLoadInit() et onLoadProgress() sont des méthodes de MovieClipLoader. Quand on code initialisation() et chargement() dans _root, ce sont bien des méthode de _root. Mais quand ensuite on les attribue à onLoadInit() et onLoadProgress() avec: Code :
Donc, this à l'intérieur de initialisation() et de chargement() fait référence au MovieClipLoader, pas à _root. C'est pour ça que ça marchait pas, et que ton attribution d'alpha ne fonctionnait pas, car les thumb sont des objets de _root, pas de MovieClipLoader. En conclusion, this dans load() fait bien référence à _root, mais this dans initialisation() et chargement() fait référence à MovieClipLoader. Il faut donc dans ces deux cas noter le chemin des thumb, c'est à dire dans ce cas _root. Il faut vraiment se méfier de this, et toujours se demander à quoi il fait référence. En fait, l'orientation objet de l'AS3 et la structuration en classes évite beaucoup ce genre d'erreur, classique en AS2. |
||
|
|
00
|
|
|
#14 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Ha oui, j'ai oublié _xscale et _width... corrige déjà ton code, et puis renvoie le pour voir où ça continue à pas marcher.
Et puis ce week-end, je suis pô là... faudra être patient... sauf si quelqu'un d'autre te répond ! |
|
|
00
|
|
|
#15 |
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Whaaa la lecture que j'ai !! Bon, je vais me regarder ça tranquillement ce week end pour essayer d'appliquer tout ce que tu m'as dit. On verra bien si lundi ça va mieux ...
|
|
|
00
|
|
|
#16 | ||
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Salut, alors je suis de retour ... avec un code que j'arrive toujours pas à faire fonctionner. J'ai bien potasser tout ce que tu m'as dis, j'ai pas tout compris, alors j'ai essayer d'adapter ton code d'exemple à mon cas. Tout se déroule sans problème apparemment, le truc, c'est qu'au final, je n'ai que la dernière image qui se charge. Aprés avoir fait plein de tests et de traces, je pense que ça vient de mes chemins d'accès. Car les vignettes thumb1 ... se trouvent dans un clip Texte, qui lui même se trouve dans un clip Scroller, dans la scène. J'ai essayé avec _parent._parent., avec _root, mais rien n'y fais. Alors j'ai essayé le mettre mes clips thumbs directement à la racine de la scène et là ça fonctionne. C'est donc bien une question de chemin. Par contre, mes vignettes qui sont définies avec un alpha = 0 au chargement, reste telles quelles. Voici mon code :
Code :
|
||
|
|
00
|
|
|
#17 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 126 ![]() |
Bon week end, merci
Cette ligne n'a pas de sens: Code :
this["_parent._parent.thumb_"+aTarget.name.split("_")[1]]._alpha = 100*(aBytesLoaded/aBytesTotal); Cette ligne a du sens: Code :
this._parent._parent["thumb_"+aTarget.name.split("_")[1]]._alpha = 100*(aBytesLoaded/aBytesTotal); Mais c'est moins casse-gueule de coder le chemin à partir de _root. Code donc un truc du genre: Code :
_root.clipClipScroller.cheminClipTexte["thumb_"+....]._alpha = ... Par contre, je vois pas pourquoi seulement ta première image serait chargée... tu as fait un trace de currentIndex dans initialisation()? et un tracec dans load() pour voir combien d'appels étaient effectués, et avec quel index? |
|
|
00
|
|
|
#18 |
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
Ouaip, j'ai bien fait un trace à chaque étape et j'ai les 36 boucles avec l'index qui part de 0 jusqu'à 35. C'est pour ça que je pige pas ... Et j'avais testé également pour "this._parent._parent", mais ça change rien !!
|
|
|
00
|
|
|
#19 |
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
OK ! j'ai changé le _root de
Code :
var tmp:MovieClip = this.createEmptyMovieClip("conteneur_"+aIndex, _root.getNextHighestDepth()); EDIT : quand je fais un trace dans initialisation et chargement il me dit "UNDEFINED" donc c'est bien un problème de reconnaissance de clip. Par contre pour ce qui est du redimmensionnement des images chargée, ça ne peut fonctionner qu'avec _xscale et pas avec _width ? |
|
|
00
|
|
|
#20 |
|
Membre régulier
![]() Inscription : décembre 2006 Messages : 493 ![]() |
OK c'est bon j'ai réussi à finaliser le code et faire exactement ce que je voulais. Encore merci beaucoup pour l'aide et la patience ...
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com