Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LIRE UNE ANIMATION DANS TOUS LES SENS


Information sur la source

Catégorie :ActionScripts Classé sous : lecture, rewind, renrouler, lirealenvers, movieclip Niveau : Débutant Date de création : 14/09/2007 Date de mise à jour : 19/09/2007 21:39:03 Vu / téléchargé: 5 322 / 908

Note :
7,25 / 10 - par 4 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note


Description

Bon je sais vous allez dire que ce code est trivial est c'est le cas, pourtant cela pourra aider certains graphistes qui font leurs bannieres de pub et qui galère à faires leurs intermolations un coup d'un sens un coup de l'autre.

Ce code est en réalité composé de 3 fonctions :
- rewind(elem:Object)
Elle pend en paramètre un movieClip afin de le lire dans le sens inverse de la lecture classique exemple dans le zip
- pingPong(elem:Object)
Qui contrairement a rewind, un fois arrivé au début du clip (oui ca renroule) on retourne ensuite a la fin en lecture normal, puis on renroule...
- normalRead(elem:Object)
Delete du enterFrame pour retourner dans le sens de lecture normal

Attention, ce code ne cherche pas à remplacer les Tween, mais permet une programmation rapide pour ceux qui ne veulent pas se prendre la tête et on plutot tendance a tout faire leurs animations sur la timeLine
 

Conclusion

J'ai remplacé la source d'origine Code ci dessus, par la proposition de tlecoz qui est bien plus propre même si on peux toujours faire mieux ca progresse.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • rewind.flaTélécharger ce fichier [Réservé aux membres club]94 208 octets
  • rewind.swfTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 435 octets

Télécharger le zip

Historique

16 septembre 2007 18:43:03 :
Explication Finales
17 septembre 2007 09:48:21 :
Cf tlecoz
19 septembre 2007 21:39:04 :
Suppression du code

Commentaires et avis

signaler à un administrateur
Commentaire de Blacknight91titi le 14/09/2007 19:50:28

Bonjour,

Je n'aurai pas le temps de faire un détailler cette fois ci donc sa ne sera qu'une réaction a l'aperçu du swf.
Je trouve l'idée très original. On connaissait la source postée il y a de cela quelques temps qui permettait de lire un clip a une certaine vitesse mais la création de ces fonctions permettants de lire un clip de divers façon me plait assez.
Et comme tu l'a précisé cela permet de ne pas créer d'animation de "retour" ou divers autre application.

Par contre au niveau du code.. Je crois qu'il y aura quelques truc à revoir. N'a tu jamais entendu parler des fonctions prevFrame() et nextFrame() ? Cela te sera beaucoup plus utile.

Problème de ce code à noter : Pour les sons ce n'est pas évident, il sera lu dans le sens inverses (tout dépend de la manière avec laquelle il est placé/lu dans les frames)

Blacknight
Note : 10/10 pour l'idée mais -1 pour le code (que j'espère te voir corriger) donc un total de 9/10. Bonne continuation

signaler à un administrateur
Commentaire de Girou le 15/09/2007 09:16:15

Hello,

j'avais également remarqué cette source mais je n'avais pas fait de commentaires.
Blacknight91titi a bien résumé mon avis mais je voudrais ajouter ceci :

Je pense qu'il ne faudrait pas fonctionner avec le onEnterFrame mais avec un setInterval() et cela pour la raison que si on veux appliquer un effet rewind() sur un clip qui a déjà des actions sur le onEnterFrame() ce qui est un cas assez courrant et ben, le rewind va tout simplement ecraser l'ancienne fonction...

P.S. a vérifier avec le setInterval() si il n'y a pas moyen d'accélérer ou de ralentir la lecture de l'animation... ce serait fun :o)

@+
Girou

signaler à un administrateur
Commentaire de mehs le 16/09/2007 05:23:55

slt a tt le monde
bon voila la verité : je ss tré deubtant en flash , en fait je ss nul .alors si kelk1 peu m'aidé pr faire ma premiere pa (n'importe cmt)je serai vraimen ...
svp aidééé moi

signaler à un administrateur
Commentaire de cedriclomb le 16/09/2007 12:33:58

Bonjour,

Blacknight91titi : Bien sur que je connais prevFrame, mais la si tu fais prevFrame tu a un stop car au moment du onEnterFrame tu est déja sur la suivante
Pour les sons si tu veux lire le sons a l'endroit tu n'a qua renrouler un lcip, l'idée c'est que tu peux avoir un clip a l'endroit et l'autre à l'envers et un autre en pingpong (il suffit de bien choisir ta cible)


Girou : Effectivement le setInterval n'est pas con mais on pense pas a tout quand on a une idée et une réalisation faite en 5 minutes :D Je vais voir ce que je peux faire.

signaler à un administrateur
Commentaire de Blacknight91titi le 16/09/2007 12:53:04

Bonjour,

Cela expliquerai donc le _currentframe-2
Cependant avec un setInterval tu n'aurait peut être plus ce problème. A voir.

Blacknight

signaler à un administrateur
Commentaire de cedriclomb le 16/09/2007 13:02:41

Le problème avec le setInterval c'est qu'il faut que l'interval soit calculé en fonction de la vitesse de lecture, et si je ne veux pas avoir de décalage mathématique il faut qu'il soit calé sur la vitesse du enterFrame.

De plus si je recule les frames physique les enterFrame AS décrite par Girou ne seront jamais réinverser, mais apres, je pense que la technique pour parer tout ces problème, c'est de bien penser son anim et de calculer ses clips en fonction car je rappelle que ces fonction n'agisse que sur un element et donc si c'est le clip qui est dans le clip ca marche aussi. Du style su un site tu fait un papier qui se déroule bah pour le renrouler ta deux solution ou tu copie les images et tu ls recollent en sens inverse, mais dès que tu modifie un mouvement faut pas zappé l'autre, sinon tu applique la fonction rewind.

signaler à un administrateur
Commentaire de Blacknight91titi le 16/09/2007 18:21:29

Oui oui nous ne mettons pas en doute l'utilité de ton animation bien au contraire, nous esseyons de t'aider à ce qu'elle soit plus adaptable.
Dans le cas où nous ne trouverions pas de solution on onEnterFrame (ce dont je doute quand même) pense à avertir les utilisateurs de ce défaut/problème.

Alors pour remplacer le onEnterFrame.
Il n'est pas possible je crois de récupéré la cadence de lecture de ton animation.
Mais ce que tu pourrais faire c'est un test. Malheuresement cela mangerai 2 frames... Un peu aléatoire comme méthode et surtout plus compliqué.
Bref si tu veux essayer :
Il faudrai éxécuter deux timer dans chaque frame pour tester la vitesse d'éxécution. Le problème également serai que s'il y a du code dans une autre frame cela augmenterai l'interval entre les deux timer.
Donc solutions à ne pas envisager !

Autre solution :
Est t'il possible de récupéré la valeur du onEnterFrame ?
Dans le genre si on fait un trace de la fonction, cela ne retourne rien ? Dans le cas contraire il suffirai de modifier le contenu de la fonction et d'y ajouter dynamiquement ton script.
Cela me parrait un peu plus réalisable mais des tests snt nécéssaire.

Dans le pire des cas il suffirai de créer un clip dynamiquement, invisible qui comporterai le onEnterFrame et ciblerai les clip en lui transmettant le nom.
Il y aurai donc une phase de chargement à créer.
La plus besoin de setInterval et l'utilisateur n'aurait pas grand chose à faire pour intégrer le script.

Creuse cette dernière idée, elle me semble la plus facile à réalisé.

Blacknight

signaler à un administrateur
Commentaire de cedriclomb le 16/09/2007 18:37:26

Quote :
Oui oui nous ne mettons pas en doute l'utilité de ton animation bien au contraire, nous esseyons de t'aider à ce qu'elle soit plus adaptable.

J'avais bien compris !!

Il n'est pas possible je crois de récupéré la cadence de lecture de ton animation.==>Oh si ca c'est fesable a mon avis y'a surment une propriété, je vais emlucher la doc :p

Quote :
Est t'il possible de récupéré la valeur du onEnterFrame ?

Tu veus dire quoi ??

Tu fais ce comment ?
Dans le genre si on fait un trace de la fonction, cela ne retourne rien ? Dans le cas contraire il suffirai de modifier le contenu de la fonction et d'y ajouter dynamiquement ton script.
Cela me parrait un peu plus réalisable mais des tests snt nécéssaire.

Pour la derniere partie j'arrive franchement pas a visualiser ton idée

Pour ce qui est des problèmes connus, je vais ajouter l'impossibilité de lire les onEnterFrame placé dans les clips a l'envers a moins que tu ais une idée pour ca, mais la franchement j'ai pas le niveau :(

signaler à un administrateur
Commentaire de Blacknight91titi le 16/09/2007 21:02:45

J'entend pas la valeur de onEnterFrame son contenu. Récupéré le contenu de la fonction et l'éditer.
Si on peut l'éditer alors il suffira d'y intégrer ton script.

Enfin pour la dernière idée :
Au chargement de l'anim on créer un movie clip sur la scène mais pas besoin de mettre quelque chose dedans. L'important c'est ensuite de lui associé un onEnterFrame pour faire tourner ta boucle (c'est ce que l'on recherche)
Dela lors l'utlisateur voudra modifier la lecture d'un clip il faudra qu'il appel une certaine fonction et fournisse le nom du clip (attention au chemin cible, le mieux serai de demander à fournir depuis _root)

Aussi dans un soucis de maniement pour le rendre plus facile. Au lieu d'avoir une fonction pour chaque mode de lecture pourquoi ne pas les rassembler en une seul et d'y ajouter un paramètre permettant de sélectionner le mode de lecture.
Ainsi une seule fonctio a retenir et le nom du mode de lecture à choisir (sans oublier le nom du clip)

Plus facile à intégrer d'ailleur (fonction à placer sur _root avec le script de création de clip pour y ajouter le onEnterFrame (cf début de message)

Voila voila

Blacknight

signaler à un administrateur
Commentaire de tlecoz le 17/09/2007 07:11:46

Hello,

Désolé de mettre mon grain de sel, mais le coup du _currentframe-2 ne me semble pas tres logique.
Du coup, j'ai essayé de faire un petit code simple qui marche dans tout les cas de figure. L'ideal aurait été de faire une classe, mais il est 6 h00 du mat' je reviens de soirée, j'avais la flemme.
J'ai donc fait un prototype (au final, c'est comme une classe extends MovieClip, mais ca s'ecrit plus à l'arrache). J'ai ajouté un evenement 'onChangeSens' qui s'active quand l'animp change de sens.Le code peut sembler un peu long, mais c'est parce qu'il gere tout les cas de figures :




//isNormalRead ---> Booleen , si true --> sens normal, si false --> reverse
//isLoop       ---> Booleen , si true --> ca tourne en boucle, si false, ca tourne pas en boucle

MovieClip.prototype.anim = function(isNormalRead,isLoop){
if(isNormalRead == undefined){
                //si la variable est indefini , on la definie
isNormalRead = true;
}
if(isLoop == undefined){
                //si la variable est indefini , on la definie
isLoop = false;
}
        if(this.readType!=isNormalRead){
        //si le sens de lecture actuelle est different de celui qu'on veut appliquer
this.readType = isNormalRead;
                //on change le sens de lecture actuelle
this.onChangeSens();
                //et on active l'evenement onChangeSens
}
if(this.oef == undefined){
                //si le clip 'oef' qui va contenir le onEnterFrame n'existe pas, on le construis
this.oef = this.createEmptyMovieClip("oef",this.getNextHighestDepth());
}
        if(this.oef.onEnterFrame != undefined){
             //si le onEnterFrame present dans le clip oef est actif
             delete this.oef.onEnterFrame;
             //on le casse, car un onEnterFrame qui dure trop longtemps prend bizarement plus de
             //ressource que si on le casse de temps en temps (quitte a le redeclencher
             //immediatement apres,c'est ce qu'on fait en l'occurence). Il y a trop peu de
             //ressources en flash pour etre avare sur l'optimisation.
        }
var th = this;
        //je stocke la valeur de this dans une variable pour eviter les probleme de ciblage car
        //dans le onEnterFrame, this correspondra à this.oef, et 'th' est beaucoup moins long a
        //ecrire que this._parent. Par ailleur cela prend moins de ressource, car lorque j'ecris
        //this._parent, je fais une evaluation, alors que ma variable 'th' stocke directement le
        //resultat de cette evaluation, et puisqu'on va s'en servir plusieur fois, c'est bcp plus
        //optimisé de faire comme cela (dans le sens ou cette evaluation se trouve en dehors du
        //onEnterFrame, et n'est donc effectué qu'une fois).Bref c'est mieux à tout point de vue ^^
this.oef.onEnterFrame = function(){
if(!th.readType){
                        //si on va dans le sens inverse
if(th._currentframe > 1){
                                //et que l'image actuelle est superieur a la premiere
th.prevFrame();
                                //on recule d'une image
}else{
                                //sinon
if(!isLoop){
                                        //si l'anim ne tourne pas en boucle
delete this.onEnterFrame;
                                        //on casse le onEnterFrame;
}else{
                                        //si l'anim tourne en boucle
th.readType = !th.readType;
                                        //on permute le sens de lecture actuelle
th.onChangeSens();
                                        //et on active l'evenement onChangeSens
}
}
}else {
                        //si on va dans le sens normal
if(th._currentframe != th._totalframes){
                                //et qu'on est pas arrivé a la derniere image
th.nextFrame();
                                //on avance d'une image
}else{
                                //sinon
if(!isLoop){
                                        //si l'anim ne tourne pas en boucle
delete this.onEnterFrame;
                                        //on casse le onEnterFrame;
}else{
                                        //si l'anim toune en boucle
th.readType = !th.readType;
                                        //on permute le sens de lecture
th.onChangeSens();
                                        //et on active l'evenement onChangeSens;
}
}
}
}
}



//on initiale la valeur correspondant au sens de lecture actuelle (pour que l'evenement
//onChangeSens fonctionne correctement.

if(this.readType == undefined){
        //je verifie si elle est undefined, car il ne faudrait pas que cette valeur se remette sur true des qu'on arrive a l'image 1
this.readType = true;
}

//je definis l'evenement onChangeSens comme n'importe quel evenement :
_root.onChangeSens = function(){
if(this.readType){
trace("changemenet de sens --> lecture normale");
}else{
trace("changemenet de sens --> lecture inversée");
}
}

//au niveau des bouton ca donne ca :
//pour reverse :
on(release){
_root.anim(false,false);
}
//pour le sens normal :
on(release){
_root.anim(true,false);
}
//pour le pingpong :
on (release) {
if(_root.readType){
_root.anim(false,true);
}else{
_root.anim(true,true);
}
}


Voila ! ^^
Je precise que ce code fonctionne partout, pas uniquement sur _root, mais sur n'importe quel clip contenant une animation.

En esperant avoir aidé certains.

++

signaler à un administrateur
Commentaire de cedriclomb le 17/09/2007 14:33:05

Merci tlecoz j'ai mis ton code dans le zip avec un exemple et laissé le miens dans la zone code.

signaler à un administrateur
Commentaire de top30 le 19/09/2007 21:06:08

no coment :
http://www.flashkod.com/code.aspx?ID=44128

et plus vieux :
http://www.flashkod.com/codes/COMMANDE-REWIND-FLASH-FLASH-MX_13813.aspx

"...function rewind(elem:Object) {
elem.onEnterFrame = function() {..."
Tu as déjà vu un "enterFrame" sur un Object toi ?


"...function normalRead(elem:Object) {
delete elem.onEnterFrame;..."
OK, en imaginant que elem est un MovieClipm tu arrètes effectivement TA lecture, mais le clip ne se met pas pour autant à se lire de facon normal...

perso, pauvre et mal encodé
[3/10]

signaler à un administrateur
Commentaire de cedriclomb le 19/09/2007 21:15:41

Pour ce qui est des source j'avais pas fais gaffe

sinon por le enterFrame sur un object je te signe que MovieClip est un objet donc ca ne me pause aucun problème


normalRead(elem:Object) {
Bien sur que si qu'il se relit normalement puisque tu arrete de l'obliger a remonter il repard dans le bon sens

signaler à un administrateur
Commentaire de tlecoz le 19/09/2007 21:21:05

Je sais pas pourquoi le code affiché sur la page est resté tel quel puisqu'au final c'est mon code qui est dans la source maintenant, et qu'il est (je pense) bien mieux codé.
Sans vouloir te voler la vedette cedriclomb, mais ce n'est pas utile de presenter un code pour presenter un code. L'idée c'est qd meme d'aporter un code utile pour les autres, non ?
Enfin, cela dit, ca m'empeche pas de dormir :)

signaler à un administrateur
Commentaire de cedriclomb le 19/09/2007 21:38:27

Lidée de laisser le code en place etait de permettre au ges de comprendre la discussions dans 6 mois mais bon je v le virer

signaler à un administrateur
Commentaire de tlecoz le 19/09/2007 21:40:44

Je viens de mater la source, c'est cool d'avoir pris le temps de faire un exemple au niveau du _root et au niveau d'un clip

Merci pour les futurs lecteurs/flasheur qui passeront par là

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

fonction Rewind bancale [ par Gizmil ]  Salut, J'utilise ce code (que j'ai trouvé sur le net) pour faire une lecture arrière dans un movie clip:Rewind = functi lecture d'un MovieClip à un certain moment [ par apocalypse_boy ] Bonjour à tous, j'ai un clip avec un Stop(); dessus et j'aimerais qu'il se mette en marche à une ou plusieurs seconde précises (par e Problème avec les duplicateMovieClip [ par ptitniko ] Bonjour, j'ai une manip simple à faire, dupliquer un movieClip de placement (place_bat) qui se trouve dans un movieClip (plan) afin de m'en servi Lecture inversée et loadmovie... [ par alkaza_prod ] Salut à tous (ou plutôt bonsoir)...Je réalise un site full flash...J'ai une anim principale et des fichiers de contenu...Au chargment, décalage d'images après le click [ par nox_satanica ] alors voilà, j'ai un menu (slider) que j'ai repris avec des images qui défilent selon la souris. Mes images sont appelées à p est-il possible de faire un duplicate movieclip par rapport a un champs texte? [ par redemption ] Bonjours a tous. je sais que mon titre est pas tres explicite, mais vous verez qu'avec ce que je demande il est difficile de faire mieux.voila m'a que problème de rollover [ par ziboris ] bonjour a tous, n'étant qu'un amateur, je suis confronté a un petit problème : j'ai créé plusieurs boutons sur une page, d&#2 Erreur de lecture d'un fichier .fla , une solution? [ par goldenboy68 ] "Une erreur disque s'est produite lors d'une opération de lecture." Une solution pour réparer ou ouvrir le fichier quand même? Pourta Action sur des textes dynamiques et movieClip [ par spg40 ] Bonjour, je crée un moteur de recherche. Je fait ma recherche et je récupère les résultats à travers un fichier PHP. Je mets Au secours!! Vitesse de lecture [ par Real_NAel ] Salut à tous,j'ai un gros souci sur mon anim, je comprends pas d'où ça vientLa cadence de lecture est fixée 30 ips, mais la lectur


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.