DIAPORAMA AS3

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 11 juin 2009 à 16:21
majnounbella Messages postés 3 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 1 décembre 2010 - 23 avril 2011 à 18:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50157-diaporama-as3

majnounbella Messages postés 3 Date d'inscription mercredi 18 octobre 2006 Statut Membre Dernière intervention 1 décembre 2010
23 avril 2011 à 18:49
s il vous plait montrer moi comment utiliser tweenlite
yapluka91 Messages postés 1 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 13:11
Bonjour,
J'ai un problème pour centrer les images dans la scéne, via un clip avec point de coordonnées centré;
je pensai qu'avec ceci:
maDiapo.x=(stage.stageWidth - maDiapo.width)/2;
maDiapo.y=(stage.stageHeight - maDiapo.height)/2;
ça le ferait, mais non.
quelqu'un à une idée du problème?
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
19 juin 2009 à 20:13
Je doute que beaucoup ne comprennent vraiment ce que tu as dit, en fait ;)

Peg'
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
19 juin 2009 à 19:48
C'est drole, je pensais que mon idée de "moteur" aurait levé plus d'un commentaire...
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 juin 2009 à 16:18
Vrai, sauf que dans le cas présent, il fallait que je remette au point pour les explications de passage du Loader.content dans une Bitmap. ;)

Mais je suis d'accord avec toi pour le principe.

Peg'
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
16 juin 2009 à 16:09
Aahh !
PEG, 2 choses:
La première, je te remercie de ton coup de pouce. même s'il a fallu que je récrives tout. La seconde c'est bien DISPLAY_OBJECT qu'il faut utiliser...Et tu sais pourquoi ? Ben simplement que si le coeur te le dit, tu peux trés bien charger des SWF dans ton diaporama non ?
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
16 juin 2009 à 13:52
C'est drole qu'apres tant de sources de "diaporama" personne n'est eu l'idée d'en faire une mais sans "vue".
C'est à dire juste le moteur:
- Chargement de l'image à affichée.
- Gestion de la progression du chargement.
- Affichage d'une image toutes les X secondes.
- Mise en pause si nécessaire.
- Ordre aléatoires, répétion ou non...

De plus en utilisant un bout d'XML formaté sur une base HTML comme suit, c'est super simple.

Le moteur dispatchant les events suivant:
LOAD_ERROR IOError ou SecurityError, peut importe, ca a fouaré !
LOAD_OPEN Au départ du chargement de l'image
LOAD_PROGRESS Quand charge l'image
LOAD_COMPLETE Une fois fini
TIME_OUT Le délai d'affichage étant écoulé
TIME_START Le timer commence à décompté le d'affichage
VIEW_START A l'affichage la première image
VIEW_FINISH A l'affichage de la dernière image
VIEW_CHANGE Quand intervertie l'ancienne et la nouvelle

Ces principales propriétés seraient
dataProvider L'XML source
currentTag Le noeud XML d'image en cours
currentView Un DISPLAY_OBJECT de l'image actuelle
nextTag Le noeud XML de la prochaine image à charger
nextView Le prochain DISPLAY_OBJECT à afficher
.. plus il va de soit des propriétés correpondant à ma description du premier paragraphe.

Le déroulement est relativement simple:
A) Pour la première image
1/ Extraction du premier tag de chargement
2/ Mise en cache
3/ Chargement de la première image
4/ Notication de la progression

B) Au chargement de la première image:
1/ On recupère le tag du cache
2/ On l'ajoute à la liste des "images vues"
3/ Notication de la disponibité de l'image
4/ Lancement du timer et notification
5/ Mise en cache du nouveau tag (aleatoire ou suivant)
6/ Chargement de la nouvelle image

Quand le temps d'affichage expire:
- Si l'image suivante est dispo on reprend au point B)
- Si l'image suivante n'est pas encore chargée, on attend.

Quand l'image suivant est chargée:
- Si le temps d'affichage de l'image en cours est expiré, on reprend au point B)
- Si le temps n'est pas expiré, on met la nouvelle en cache, on avise, et on attend.

Et comment on l'utilise alors ?
En simplement en intégrant le moteur à un "clip" et en définissant attribuant une écoute à chaque evenement du moteur....

Simple non ?
webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009
12 juin 2009 à 09:11
Salut Peg31,
Merci pour tes commentaires, là je comprends mieux, je vais tâcher de corriger ça.
Bonne journée
Chris
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 juin 2009 à 05:27
Enfin, si ... je vais juste expliciter mes premières remarques (constructives, puisque fondées) et y apporter d'autres ajouts:

1° Pourquoi un XML ?

Ben déjà pour une facilité de modification de la galerie sans devoir retoucher au code (et donc recompiler le swf) de la part de l'utilisateur. Ensuite ça permet de mettre n'importe quel nom de photo et de les prendre n'importe où (et pas forcément dans un dossier définis).

Imaginons qu'un jour ton client actuel te dise qu'il veut ajouter une photo à ta galerie (si, si, ça peut arriver) ... que dois-tu faire ? Ouvrir le Fla, modifier la valeur de "nbrDiapo", Recompiler le flash, le remettre en ligne et re-tester pour être sûr que ça fonctionne. Tu vas perdre 1h de temps sur une modification bénigne Alors qu'en XML il te suffirait de modifier le XML directement sur le serveur pour savoir de suite que ça fonctionne les yeux fermés (le client peut le faire tout seul, en plus).

2° La gestion des photos affichées

Dans le cas présent, tu considères le contenu de ton Loader comme un DisplayObject, ce qui est théoriquement bon. Sauf que "DisplayObject est une classe de base abstraite."(cf. Doc de Flash), c'est à dire que c'est un ensemble d'objets sans en être un elle-même.
Or, ce que tu charges est FORCEMENT un bitmap ! Pourquoi ne pas en tirer partie ?
Utiliser la Classe Bitmap pour afficher l'image chargée et seulement modifier son contenu éviterais les addChild à répétition (et les doubles tests pour virer le précédent).
Pour l'alpha, un simple swap entre deux bitmaps est possible sans trop de complications.

3° la classe TweenLite
Ben là, c'est pas vraiment une critique, puisque j'ai précisé que j'étais pas objectif sur le coup ;)

4° Les restes d'AS2
Ben ils sont un peu partout, principalement dans la gestion de tes objets visuels. Tu es encore à l'idée de "movieClips", éléments uniques et multiples dans une animation (la preuve avec ton "DisplayObject"), alors que l'AS3 apporte une multitude d'objets divers et tous plus ou moins adaptés à ce que tu cherches à faire.
Ta vision linéaire du code prouve que tu n'as pas encore bien saisis la puissance du système évènementiel de l'AS3 qui permet de créer des objets et de les faire interagir entre eux. (ok, j'abuse un peu, mais tu vas vite y venir)

Voilà pour la critique de mes propres critiques ...

Maintenant, passons aux petits points précis de ton code :

- Le système d'erreur de chargement est une très bonne chose, sauf que l'animation s'arrête définitivement s'il manque une image dans la liste. Il aurait été plus intéressant de passer à la suivante, histoire de continuer simplement le diaporama.
- tu peux mettre ton timer à 5000 et une seule répétition, c'est plus "propre" (même si ça ne change rien) et ton écouteur final serait seul utile.
- le paramètre "indice" dans la fonction "charger" est inutile et recrée une variable doublon qui risque de te causer des ennuis à force : hé oui : "indice" dans cette fonction n'est absolument pas le même "indice" que celui déclaré dans ta définition de classe ... je pourrais t'expliquer avec un exemple si besoin.
- "if (indice++ >= nbrDiapos) { indice=1; }" peut être remplacé par "indice %="nbrDiapos" .. mais à condition de commencer par 0 (ce qui, dans le cas d'un XML, est utile)

Pour montrer ma bonne foi, je serais prêt à te refaire ta source avec toutes les modification dont je t'ai parlé (et encore une fois sans vouloir te braquer/vexer/humilier ...) à titre d'apprentissage, et pour t'illustrer tout ce dont je te viens de t'expliquer.
Mais encore une fois, il faut que ça te soit utile à toi-même (principalement) et que tu y portes de l'intérêt ... je n'ai pas envie de perdre mon temps et préfère que ça te soit profitable.

Peg'
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 juin 2009 à 04:39
J'aurais bien étoffé mes premières remarques et montrés pleins d'exemples, mais aux vues de ta première réactions, je me demande vraiment si tu vas prendre le temps de comprendre sans te braquer.

Le but étant, pour moi, de te faire réagir et de te donner envie d'améliorer ta systémique et de progresser (ce qui est le but premier du site) ... Sache juste que je suis direct et que sa choque certain, mais au moins c'est efficace.

Après soit tu es ouvert à l'idée de progresser et à ce niveau on prends du temps pour t'aider à avancer en AS3 (sans rien y gagner que la satisfaction d'avoir aidé quelqu'un), soit tu t'en fout et à ce stade on ne va pas perdre notre temps.

à toi de voir...

Peg'
webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009
12 juin 2009 à 01:24
Ha, j'oubliais de dire, d'écrire, que je ne suis vraiment pas vexé qu'on me dise que c'est bien pour un début car c'est effectivement un début, cela fait seulement une semaine que je me suis plongé dans l'AS3. Cette source est principalement inspiré de ce que j'ai appris sur
http://www.flashxpress.net/ressources-flash/pratique-de-lactionscript-3-chapitre-1-2-et-3/
et je crois que le mec il touche sa cacahouète en AS3...
webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009
12 juin 2009 à 01:17
Ok, j'ai peut-être été un peu cinglant avec Pegase31 qui a le mérite de réagir rapidement sur les soumissions de sources et donc de prouver son intérêt pour la chose.

Gremlins7, je suis étonné que tu aies eu à modifier le code, il marche tel qu'il est..?? Je l'ai mis tel quel sur le site de mon client. N'hésite pas à me dire ce que tu as du modifier pour que cela marche.
ps : Je retiens ton conseil ;-)

On_drag_on, je suis d'accord avec toi que le xml est facile à mettre en place, mais, je me répète, ce n'est pas le sujet. La problématique était de faire un diapo de 6 photos. (point) Après tu peux toujours améliorer un code comme celui-là, c'est évident, c'est même le but implicite d'un tel apport. Là tu es libre d'implémenter la fonction ou la classe qui utilisera cette classe Diapo. C'est bien le principe de la POO, une classe, une tâche?
Et franchement, il est bien plus simple de nommer de façon incrémentielle des fichiers que de créer un xml. J'aurais pu charger un fichier texte contenant uniquement le nombre de photo, et hop, c'est dynamique, mais quel intérêt?

Je trouve que vous êtes un peu exigeant; J'ai catégorisé cet apport dans la catégorie "Débutant", c'est bien que je sous-entends que c'est plus un tutorial ou une base à développer qu'un programme endUser.

Globalement, je comprends vos exigences, il y'a pas mal de codes soumis qui sont non-finis ou qui ne tournent pas tout simplement qu'on se demande si un post dans le forum n'aurait pas été plus utile. Mais ce n'est pas une raison pour tirer à boulet rouge sur une soumission sans prétention.
En revanche je veux bien qu'on me dise si j'ai fait une erreur, si de la ressource peut-être récupérée ou si un event remonte trop haut ou est trop gonflé par rapport à son utilité, si le "garbage collection" va bien supprimer les images chargées non-utiles par la suite. Cela me ferait progresser...
Plus que les améliorations que je pourrais y apporter, Parce que, si je suis votre raisonnement, j'aurais pu soumettre un fla qui fasse le boulot de photoshop ou de flicker par exemple. Mais là, vous pouvez attendre... longtemps... longtemps... :-)))
Autant dire que si c'est ce niveau de développement que vous attendez, il y'a de fortes chances que la prochaine soumission de source soit pour 2024... Si le Terminator ne nous a pas éradiqué ... Il est tard et je me lâche, bonne nuit et merci tout de même pour vos interventions..

Christophe
on_drag_on Messages postés 1236 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 6 octobre 2010
11 juin 2009 à 23:27
Salut webcrea92

/*Le surcharger d'un chargement dynamique aurait, il me semble, semé la confusion pour un débutant et été inutile dans ce cas précis.*/

Personnellement je ne suis pas du tout d'accord avec toi sur ce point. Le XML est relativement facile à mettre en place, cela ne prend que quelques lignes de code en plus et c'est beaucoup plus simple pour un client (qui ne connait certainement pas la technologie Flash) de répertorier ses fichiers par ce biais. Pour les autres avantages Peg' les a mentionné dans son commentaire.

"Critiquer c'est argumenter en faveur ou/et en défaveur d'un sujet de façon à ce que l'auteur puisse progresser et situer le niveau ses connaissances"

Rien à voir avec ta définition.

@+,
gremlins7 Messages postés 380 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 28 décembre 2009
11 juin 2009 à 23:20
Salut,
Je trouve ce code plutot sympa, même s'il y a des trucs à revoir...pour moi c'est cool, je doit faire un truc similaire et donc tu viens de me faire gagner du temps, merci. En revanche, j'ai du modifier/ajouter deux ou trois lignes pour le faire fonctionner et la dessus Peg n'as pas tort : un code fonctionel c'est mieux.
Pour Peg, t'inquiète pas, il est toujours comme ça. Moi aussi j'ai réagit comme toi au debut. Mais bon, c'est notre garde-fou et faut faire avec son coté soupe-au-lait prononcé.

Grems

PS : un conseil, à l'avenir post toi même le premier commentaire de ta source, ça empeche les critiqueurs exacerbés de mettre dès le debut des reflexions du style "pas mal pour un debut" ou "c'est un bel essai" ou encore "petite source de base utile pour les débutants"... (j'ai eu le droit au dernier qui m'est particulièrement resté en travers de la gorge, je ne citerai pas son auteur)
webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009
11 juin 2009 à 19:40
Dis-moi pegase31 ce qu'il y'a comme 'restes' d'as2 dans ce code? Je ne comprends pas ta remarque sur la gestion approximative des photos. Il n'y a qu'un seul Sprite et des child.

C'est bien de critiquer mais à en abuser tu risques d'en décourager certains. Ce bout de code est simple et destiné à des débutants qui voudraient se familiariser avec cette nouvelle version d'actionScript 3.

Si tu le maitrises, tu maitrises :
- Le chargement des images
- La gestion des évènements
- La gestion d'un déclenchement d'action toutes les n secondes
- Tu découvres une nouvelle bibliothèque TweenLite (j'admets qu'elle est superflue dans ce cas, une utilisation de Tween aurait suffit, mais moi je préfère TweenLite, désolé de ne pas adhérer à tes goûts)

J'aurais bien aimé le trouver quand je me suis lancé dans AS3.

On peut bien évidemment améliorer cette classe en chargeant un XML ou en faisant appel à un script php pour remonter la liste des images ou une une base de données mais ce n'était pas le sujet et tu aurais certainement émis des critiques (cf chrisGalerie).

Pour infos, ce code je l'ai développé pour un client qui en est très content (http://www.legolfparc.com). Il répond à une demande précise. Le surcharger d'un chargement dynamique aurait, il me semble, semé la confusion pour un débutant et été inutile dans ce cas précis. Mais je t'invite à le développer...

Christophe

"Critiquer c'est 1 doigt pointé vers l'autre et 4 vers toi!"

ps : Comme j'ai cru comprendre que tu étais un peu soupe-au-lait et que tu n'allais certainement pas en rester là, mais au contraire polluer cette source avec tes commentaires acerbes. Sache que je ne pourrai pas forcément y répondre car j'ai un métier qui me prend du temps. j'ai fourni cette source juste pour en faire profiter les autres comme moi je profite du savoir des autres en consultant ce site.
Bien à toi peg31 et sans rancune, pour infos mes filles aiment beaucoup le jeu des hamburgers. Je n'ai pas eu le temps d'y poster un commentaire positif alors j'en profite, félicitations.
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
11 juin 2009 à 16:21
Un exemple fonctionnel serait le bienvenue ... car là à part ouvrir le fla, il n'y a rien d'utile.

Mais en regardant ta source, on voit vite la limite : il n'y a pas de XML et les photos sont forcément nommée à la suite ("maphoto1.jpg", "maphoto2.jpg" ...) et on doit recompiler la source à chaques fois qu'on a un changement du nombre de photos ou de leurs nom.
Pas très dynamique tout ça.

La gestion des photos est trop approximative, même si ça fonctionne. Il suffirait d'un seul Sprite et d'un loader pour éviter le jonglage entre les éléments affichés ... il serait même possible, via un Bitmap de faire un fondu en mélangeant les deux photos !

Pour finir, j'émettrais un fort doute quand à l'utilité de la classe TweenLite dans ton cas. (Mais je suis un fervent défenseur du Tween de base de Flash).

Conclusion : bel essai, le code est propre mais la méthode est encore trop fouillis et pas assez dynamique. Tu tiens le bon bout en as3 mais débarrasse-toi des restes d'AS2 et ce sera impec' ;)

Peg'
Rejoignez-nous