Petites questions d'Action Script 3 - Flash/ActionScript - Programmation
Marsh Posté le 14-04-2011 à 23:38:42
Non...
Il y a le "pas très catholique", et le "affreux". Le prend pas mal hein, j'ai aussi fais des chose horrible lors de mon apprentissage, mais quand même !
Je pense que tu comprend même pas les lignes que tu nous donnes...
quel est l'interet d'écouter un EnterFrame à chaque frame... ?
Pourquoi vides-tu ton clip à chaques frame ?
As tu conscience que tu créé 1 loader par frame à l'infini ? (vive la consomation mémoire)
...
Pour répondre à ta question, c'est très simple, entre l'exécution de l'instruction chargeur.load ( maRequete ) et trace(chargeur.width), il se passe à peine 1 millième de seconde... bref, NON, la photo n'a absolument pas le temps de charger entre temps ! c'est pour celà que rien est exploitable...
Il faut que tu place l'image seulement une fois qu'elle a chargée
Reprend à 0 ton code.
Je t'aiguille, il n'est pas judicieux d'utiliser les keyframes de flash, elles sont utile pour animer dans l'API, mais pas pour être manipuler en AS...
Le mieux est de charger toutes tes images à l'aide d'une boucle, une fois fini, tu les affiches une à une, soit au rythme des frames avec un EnterFrame, soit à l'aide d'un timer (exemple : toute les 30ms).
Code :
|
Et voila, propre et léger. Bien sûre, je n'ai pas testé, j'espere qu'il n'y a pas d'étourderie.
Si jamais, dis moi ce que tu ne comprend pas
Marsh Posté le 15-04-2011 à 00:45:32
Merci pour cette réponse assez claire. C'est vrai que j'ai une approche batarde, ca vient du fait que je viens d'une approche totalement graphique et j'ai un peu de mal a faire abstraction de la timeline... Pour dire, si j'avais pas 70 images, je les auraient toute mise sur un calque guide pour bien me representer la chose.
Bon je poste de mon telephone, donc j'ai juste le lu le code (moi pas tres bien l'ecrire, mais bien lire quand meme), la seule chose qui me questione, c'est que ce code charge toutes les photos d'un coup, si j'ai compris, et ca m'embete... Si je me suis forcé a tenter une approche dynamique, c'est justement pour ne pas avoir un SWF de 2 Mo, si c'est pour avoir autant a loader dans ma gallerie, l'interet est limité...
En fait ce que je souhaite, c'est charger une image, la centrer, l'afficher, puis quand l'utilisateur veut voir la suivante, supprimer l'image et charger la suivante, avec une petite tween pour enrober le tout. Chaque image pese 40 ko max... Mais apres c'est ptet pas la bonne approche...
Marsh Posté le 15-04-2011 à 07:47:05
Ah ok, je pensais que tu chargeais une sequence d'image (animation) !
Du coup en effet, je charge tout 1 à 1...
Alors du coup, la solution est de référencer tes images dans un XML.
Il faut en principe 2 loader et 2 conteneur, ça te permettra de faire une transition entre l’ancienne et la nouvelle image.
A la fin de la transition, tu unload l'ancienne image pour libérer la mémoire.
Pour les Tween, je te suggère TweenLite de greensock, qui est + léger et + éfficace que le tween par défaut d'AS3.
Marsh Posté le 15-04-2011 à 09:31:06
abais a écrit : Ah ok, je pensais que tu chargeais une sequence d'image (animation) ! Alors du coup, la solution est de référencer tes images dans un XML. |
Oula, 2 conteneurs qui se relaient, ca me fait un peu peur
Sinon j'utilise TweenMax sur tout le projet
Marsh Posté le 15-04-2011 à 10:04:50
lxl ihsahn lxl a écrit :
|
TweenMax est au moins aussi bien
lxl ihsahn lxl a écrit :
|
Commence avec un seul alors, mais le double loader est indispensables afin de bien décharger l'image disparu APRES avoir affiché la suivante (ce qui permet une transition)
Marsh Posté le 15-04-2011 à 11:19:18
En fait ce qui m'a fait utiliser la timeline, c'est que la succession de photos est découpé en galleries, et que des miniatures pointent dessus. Et faire un "this.xxx.gotoAndStop('nomGallerie')" c'est assez facile.
Faudrait que je fasse un xml, intégrant les infos des catégories, l'url des images, toutes les infos, mais j'ai encore beaucoup de mal avec ça
Marsh Posté le 15-04-2011 à 13:16:54
Je ne peux pas trop t'aider vu que je ne sais pas ce que tu as dans la tête en terme d'ergonomie, mais le fait de passer par la TimeLine n'as rien de dynamique.
Ça dépendra aussi de tes motivations, mais moi, plus je gobe de l'AS, moins je me sert de l'API Flash, et pourtant, je suis graphiste de base.
Marsh Posté le 15-04-2011 à 13:58:03
Oui c'est une question d'habitude, mais jsuis pas encore prêt pour m'affranchir de l'aspect conception graphique de flash...
En fait je ne cherche pas forcément à faire du 100% dynamique, juste à le pas avoir un swf trop lourd, et charger les images juste au moment où on en a besoin, et en les supprimant après.
C'est la seule chose que je regrette de l'AS2, le loadMovie qui était si simple à utiliser... Et cette notion de child qui est hyper restrictive... par exemple, j'ai ajouté dynamiquement sur un autre projet une vidéo youtube (avec lecteur embeded), et bien je n'ai pas réussi à detruire la vidéo autrement que par un code situé dans le même clip que la vidéo, et comme j'avais construit mon interface avec des frames en guise de page, impossible de passer d'une page à l'autre tout en tuant la vidéo... j'ai surement mal fait mon truc, mais le fait qu'il faille faire un addChild pour pouvoir faire un removeChild, alors que les clips déjà imbriqués dans un autre sont a proprement parler aussi de fils même si on ne les a pas charger dynamiquement...
Bref, c'est hyper pas facile pour moi, mais ça va venir
Marsh Posté le 15-04-2011 à 15:38:00
Bon j'ai réussi à modifier mon code temporairement pour qu'il soit fonctionnel (j'ai ajouté un écouteur Event.COMPLETE sur le chargeur et ça marche) , j'ai besoin d'un truc rapidement fonctionnel, mais je me contraindrais à le refaire de façon plus logique par la suite
Par contre j'ai eu une idée pour boucler ma série d'image, plutot que le truc batard de mettre des gotoAndStop en première et dernière image vide de la séquence :
J'ai mis un label "debut" sur la première image, et un label "fin" sur la dernière, et sur mes boutons qui agissent en prevFrame() et nextFrame() j'ai ajouté une condition, du genre
Code :
|
Je pense avoir bien compris mon propre code, en toute logique ...
Mais quand je suis en frame 1 et que je clique sur le bouton, il me met en frame 1 une fois (avec 90 "Error #2044: IOErrorEvent non pris en charge : text=Error #2035: L'URL est introuvable." en sortie), et ne pars en 'fin' qu'au second clic. J'ai essayé de remplacer les currentLabel par des currentFrame et leur numéro, mais rien n'y fait... pourtant ma fonction devrait lire le label avant de décider quoi faire...
Marsh Posté le 15-04-2011 à 20:36:45
il y a les modulos aussi à ne pas oublier... ça te permet de boucler un nombre. renseigne toi dessus.
Sinon l'AS2 est très obsolète et lourd, tout ce qui se fait en AS2 est possible en AS3, sauf que la rigueur est obligatoire.
Marsh Posté le 16-04-2011 à 10:32:12
Je ne regrette pas AS2 dans l'ensemble, non
les modulos ? Boucler un nombre ? Modulo, c'est le reste d'une division, là j'ai un numéro de frame ou un nom de label, je ne vois pas
edit: ah, tu veux dire qu'il faudrait que je fasse une boucle infinie, qui calcule le reste de la division de i par la longueur de ma timeline, avec une incrémentation dans un sens ou l'autre suivant la flèche cliquée...
C'est pas gênant, cette possibilité d'incrémenter à l'infini ?
Marsh Posté le 17-04-2011 à 12:21:28
Bah, tu as une variable "currentImage" (enfin, tu la nommes comme tu veux) qui te stock l'image actuelle ( 0 par défaut), puis "nbreFrame" le nombre de frame.
currentImage démarre a 0, tu as donc un déballage de 1 avec les drames correspondante.
Tu fais une fonction :
goToImage(index:int)
{
currentImage = (index + nbreFrame) % nbreFrame;
// le + nbreFrame est la pour palier aux nombres négatifs
gotoAndStop(currentImage + 1);
// le +1 parce qu'une timeline démarre a 1 et non 0
}
Ton bouton suivant fait goToImage(currentImage + 1) et le précédent : goToImage(currentImage - 1)
Marsh Posté le 14-04-2011 à 17:21:33
Bonjour tout le monde !
J'ai une petite question d'AS3.
j'ai réalisé une galerie dynamique (ma première), et j'arrive à mes fins, seul un point me résiste.
Vous aurez compris, j'ai une série de frame, à chaque frame il charge un jpg dont le nom est le numéro de frame. J'ai sur chaque frame le code suivant, c'est ptet pas très catholique mais là n'est pas la question :
Ce que je souhaite faire, c'est centrer mes images dans une zone de 412 pixels de large (ma "fenêtre" maximale dans lesquelles toutes les photos doivent rentrer).
L'image étant placée à l'origine, qui est au coin supérieur droit, il faut donc qu'elle se décale de la moitié de 412 moins la largeur de la photo.
Le souci, c'est que le chargeur.width retourne 0, alors que la photo est chargée juste au dessus, et je n'arrive pas à trouver la subtilité de la manipulation des enfants...
Si vous pouviez me dire où j'ai merdé, ça serait gentil
Et je me demande s'il ne serait pas pertinent qu'un topic existe pour poser ce genre de petites questions sans avoir à polluer la sous-cat, auquel cas ce topic pourrait le devenir si la modération approuve
---------------
[YouTube] Le Cerveau Lent : vulgarisation sciences cognitives ◦ [url=https://forum.hardware.fr/hfr/AchatsVentes/Photo-Audio-Video/vds-pentax-samyang-sujet_644991_1.htm]Vente Penta