Forums Développement Multimédia

Aller au contenu

- - - - -

Langage de script simple pour les animations Flash

TUTO

95 réponses à ce sujet

#1 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 20 January 2011 - 23:06 PM

Salut, ou re :)

Suite à l'idée proposée dans cette discussion, j'ai eu envie de voir ce que ça pouvait donner. :)

L'idée de base, c'est de coder en AS3 un package permettant de scripter dans le scénario de Flash avec un langage simple, accessible en 5 minutes sans connaissances de base en programmation. :)

Exemple :

// Stoppe la lecture du clip sur l'image en cours, attend 5 secondes, puis reprend la lecture.
stopPlaying().wait(5000).startPlaying().end();
 
Cette syntaxe est un design pattern : Fluent Interface et est admirable de simplicité (j'adore). :D

J'ai commencé à coder une base, qui permet d'exécuter le script précédent.
Les sources sont à disposition, afin que chacun puisse y mettre son grain de sel si ça le tente. ^^ Je trouve que l'idée peut être intéressante. Ca a même peut-être déjà été fait, j'ai pas vérifié car j'avais envie de le coder. :P

Point de vue utilisation :
Le clip sur lequel on veut utiliser cette syntaxe doit être lié pour ActionScript, avec en classe de base :

Citation

dada.flashfluentinterface.movieclip.MovieClipFluentInterface
Pour l'instant les seules "actions" disponibles sont celles utilisées dans l'exemple précédent.
A noter que l'action "end()" est particulière, car elle permet de terminer l'enregistrement des actions et lancer leur exécution immédiatement. On peut d'ailleurs ne pas l'appeler et attendre une image ultérieure, ça aura pour effet d'empiler les actions ne se terminant pas par end(), jusqu'à ce qu'un appel à end() soit rencontré.


Pour les dev :
On peut facilement ajouter de nouvelles possibilités en ajoutant des commandes et les méthodes publiques correspondantes dans la classe MovieClipFluentInterface.
N'hésitez pas à ajouter de nouvelles commandes, faire des modifs dans le code, etc.
De base c'est un projet FDT, compilé avec Flash pour tester directement dans le FLA.

Pour les moins-dev :
N'hésitez pas à donner votre avis sur l'utilité de cette chose, et à faire part des idées qui vous viennent à l'esprit, des besoins que vous auriez, etc. :)

Fichier(s) joint(s)



#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 20 January 2011 - 23:09 PM

:Hola: j'adhère !

#3 Gaël-PA

    Ceinture Jaune

  • Members
  • PipPip
  • 16 messages

Posté 21 January 2011 - 10:25 AM

Tout simplement génial^^

Mais je ne vais pas pouvoir aider :cry: , je serais plutôt dans le scenario un bon testeur :P :D :Hola:

#4 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 12:31 PM

Voir le messageGaël-PA, le 21 January 2011 - 10:25 AM, dit :

Mais je ne vais pas pouvoir aider :cry:
Mais si tu peux. :) De quoi as-tu besoin comme outil de ce genre dans le scénario ?

#5 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 21 January 2011 - 12:41 PM

Yop,

Si on parle bien de simplifier l'utilisation pour les graphistes non développeurs, j'aurais bien quelques propositions sur la création de palettes d'effets simplifiées à la manière d'un soft de montage.

Par exemple l'utilisation du Perlin en deux clics :
liquide, brume, fumée, nuage...

Ou la gestion de particules simplifiée qui pourrait aussi être une bonne idée :
Explosion de pixels, fontaine, starfield...

Des choses qui, sans être trop complexes à développer, demandent quand même un minimum de gestion et de connaissances, et qu'il serait sans doute possible de simplifier à l'usage.

#6 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 12:55 PM

Voir le messagedada, le 21 January 2011 - 12:31 PM, dit :

Mais si tu peux. :) De quoi as-tu besoin comme outil de ce genre dans le scénario ?

Un outil Interpolation.
A mon avis, en code c'est sans doute un Tween.
Mais, avec ta méthode, ça donnerait envie de faire :

monClip.interpolation(100).fromXY(50,25).toXY(200,300).withFade(Out);
monClip.interpolation(30).fromAlpha(0).toAlpha(1).withFade(InOut);
monClip.end();

Ce qui serait :Hola: Image IPBImage IPBImage IPB :Hola:

#7 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 13:02 PM

Voir le messageDldler, le 21 January 2011 - 12:55 PM, dit :

Un outil Interpolation.
j'ai ajouté ça dans la TODO. :)

Citation

Par exemple l'utilisation du Perlin en deux clics :
liquide, brume, fumée, nuage...

Ou la gestion de particules simplifiée qui pourrait aussi être une bonne idée :
Explosion de pixels, fontaine, starfield...
L'idée est intéressante, mais je ne sais pas si c'est approprié à l'outil que j'ai commencé à developper. Car ça nécessite la création d'objets, plusieurs animations, etc. Mais pourquoi pas, il faudra voir. :)

#8 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 13:06 PM

Sinon, j'ai commencé à ajouter d'autres actions possibles, et j'ai ajouté plein de trucs dans la TODO. Je partagerai ça dès que possible (je voudrais faire quelques modifs de code avant, notamment virer le manager qui était temporairement en statique et qui pose donc un gros problème si on veut utiliser ces actions sur plusieurs clips :D).

Par exemple (déjà ajouté ou en TODO) :

- context(target) -> change le contexte des actions suivantes sur un autre clip (qui hérite aussi de la classe de base). Peut s'utiliser plusieurs fois dans la même chaîne d'actions;
- waitClick() -> attend un event de click sur l'objet avant de passer à la suite. Les autres actions liées à des évènements seront faciles à ajouter car elles utiliseront la même classe de commande.
- playTo (frameNameOrNumber) -> Lit jusqu'à une frame donnée puis stoppe.
- revert() -> lit à l'envers
etc... :)

#9 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 13:11 PM

Voir le messagedada, le 21 January 2011 - 13:02 PM, dit :

j'ai ajouté ça dans la TODO. :)


Purée… donc faisable… :shock:

…j'ai tenté de lire la description du pattern…
…j'ai fait le curieux dans ton package…
… je me noie avant même de comprendre ou je suis.
Pas le début de la moindre lueur de comment ça marche.

Alors forcément je cogite… j'supputationne à tâtons…

Ça te dérange si je pose des questions sur le principe même ?
Spoiler


#10 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 13:26 PM

Citation

Purée… donc faisable… :shock:
Oui, mais plutôt avec la syntaxe suivante :
alphaTo(valeur, temps, typeAnim)
pour permettre de créer la commande de Tween d'un seul coup, ce qui correspond mieux au fonctionnement actuel (qui n'est pas non plus forcément figé).
Pour définir l'alpha de départ, on ferait plutôt :
alpha(0.5).alphaTo(...);


Citation

Ça te dérange si je pose des questions sur le principe même ?
Au contraire. :)

Je pense que le mieux pour comprendre le fonctionnement est de commencer par la classe du clip (MovieClipFluentInterface) et de suivre le cheminement vers les commandes et le CommandManager. Il faut aussi regarder les classes Abstract*, car elles contiennent une logique particulière.

Chaque fonction de la classe du clip renvoie, non pas une fonction, mais une référence vers le clip lui-même (en d'autres termes, la méthode renvoie la référence de l'objet possédant la méthode ^^). C'est ce qui permet d'utiliser la syntaxe : action1().action2().action3().

Après, le coeur du système c'est le CommandManager. Mais avant il y a la création de commandes (dans la classe du clip).
Les commandes stockent les valeurs reçues en paramètres qui serviront au moment de leur exécution. Et elles ont une méthode execute() qui fait le truc pour lequel elles sont prévues. Enfin, elles envoient un event COMPLETE quand leur exécution est terminée.

La volonté à la base, c'est qu'on ne lance jamais une commande avant que la précédente soit terminée. Et c'est là la principale responsabilité du CommandManager. Il mémorise dans un tableau (un Vector) toutes les commandes qu'on lui a donné, puis quand on lui demande de s'exécuter il lance la 1°, attend son event COMPLETE, lance la 2°, attend son event, etc jusqu'à ce qu'il les ait toutes exécutées.

Au niveau du l'utilisation dans Flash, il faut un moyen de dire "j'ai fini de lister mes actions, je veux les lancer maintenant". C'est le rôle de end(), qui se contente en fait d'appeller la méthode execute() sur le CommandManager. :) end() ne renvoie pas de valeur car comme elle valide et lance la chaîne d'actions, on ne doit rien ajouter après.

En gros voilà. C'est vrai que le code n'est pas documenté, ça viendra. :)

#11 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 14:19 PM

Voir le messagedada, le 21 January 2011 - 13:26 PM, dit :

[…]renvoie, non pas une fonction, mais une référence vers le clip lui-même[…]

A part ceci qui m'écarquille toujours un peu les yeux… le reste est clair… clairement pas de mon niveau, aussi… mais clair tout de même.

Cela voudrait dire que toutes les fonctions sont définies dans l'objet lui-même ? Accessible quelque soit le contexte ? Ça explique un peu pourquoi l'interpolation doit se définir en une seule fonction, en fait… enfin je crois…


Voir le messagedada, le 21 January 2011 - 13:26 PM, dit :

En gros voilà. C'est vrai que le code n'est pas documenté, ça viendra. :)
J'ai jeté un œil à la classe. :mrgreen: Commentée ou non, je ne crois pas que ça change quelque chose pour moi. Mais d'autres peut-être…
Une bonne raison pour te remercier de tes explications et du temps passé à me répondre clairement.

je crois que pour le fun cérébral, je vais tenter de m'implémenter l'interpolation (à ma façon simplifiée) puisque je viens juste d'en faire une version… qui ne me satisfait pas du tout (plus dans l'esprit tween). En me heurtant aux difficultés, je comprendrai peut-être mieux la nécessité d'un Manager.

#12 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 14:50 PM

Citation

Cela voudrait dire que toutes les fonctions sont définies dans l'objet lui-même ? Accessible quelque soit le contexte ?
Quand on change de contexte (ce n'est pas encore dans la version zippée), c'est qu'on cible une autre instance de la classe MovieClipFluentInterface, donc la suite des fonctions s'exécutent sur cette 2° instance, et on ne peut revenir sur le 1° qu'en changeant à nouveau de contexte (ce sera ptet plus parlant quand je mettrai un exemple).

Citation

je crois que pour le fun cérébral, je vais tenter de m'implémenter l'interpolation (à ma façon simplifiée) puisque je viens juste d'en faire une version…
Tu vas devoir créer une classe de commande (héritant de AbstractCommand...), en faisant attention de bien envoyer l'event quand l'exécution est terminée. Et ensuite, tu ajoutes une méthode dans MovieClipFI. :)

#13 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 16:54 PM

Voir le messagedada, le 21 January 2011 - 14:50 PM, dit :

Quand on change de contexte …
…vouiii ? … parce qu'un "contexte" ça doit exprimer quelquechose de concret en prog… je parlais plutôt du contexte vu par l'utilisateur :mrgreen: mais je vois le principe

Voir le messagedada, le 21 January 2011 - 14:50 PM, dit :

Tu vas devoir créer une classe de commande (héritant de AbstractCommand...), en faisant attention de bien envoyer l'event quand l'exécution est terminée. Et ensuite, tu ajoutes une méthode dans MovieClipFI. :)
Et là, je suis lâché.
Peut-être que j'ai laissé penser que j'allais ajouter l'interpolation dans ta classes à toi ? Ça je ne pourrais pas. Même pas essayer. Je veux juste tenter ma propre expérience. Un (tout) petit exercice pour avoir une première approche. Je n'irai pas très loin, peut-être même pas jusqu'à une version viable… besoin d'un peu de cambouis sur les mains pour que le cerveau fasse un peu de ménage dans mes suppositions.

Autre variantes pour SuperMovieClip :
la possibilité de glisser une fonction en paramètre de l'instruction waitClick
monClip.waitClick(maFonction)
;
avec la fonction play par défaut, ça enrichirait ce que tu as proposé… ?

#14 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 18:40 PM

Hop.
Premier test : je crois qu'au moins je comprends maintenant que c'est possible.
Ça n'est pas exploitable, ça n'est sûrement pas aussi souple que le pattern en question, mais ça fonctionne quand même, et je découvre pantois mais tout excité que l'on peut exploiter le pointage comme système d'écriture simplifié…

Promis, je ne squate plus. C'était juste pour montrer que j'y arrive.
Hop. Je range mon ego dans ma poche, mon mouchoir par dessus :)

Fichier(s) joint(s)



#15 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 18:58 PM

Voir le messageDldler, le 21 January 2011 - 18:40 PM, dit :

Hop.
Premier test : je crois qu'au moins je comprends maintenant que c'est possible.
Sympa. :) Et après tu dis que tu ne te sens pas capable d'ajouter une commande, alors que c'est plus facile ?... :P

Citation

Ça n'est pas exploitable, ça n'est sûrement pas aussi souple que le pattern en question
Cà n'en est pas loin d'être souple, il faut juste ajouter une couche d'abstraction, plutôt que de gérer uniquement un type Interpolation, il faut gérer un type plus abstrait Command (une commande contient une interpo, une autre un timeout, etc). :)

Citation

Promis, je ne squate plus.
Tu es le bienvenu. :)

Citation

…vouiii ? … parce qu'un "contexte" ça doit exprimer quelquechose de concret en prog… je parlais plutôt du contexte vu par l'utilisateur
Moi aussi, mais comme j'ai le code en tête et que dans le zip plus haut cette gestion de contexte n'est pas présente, je suis peut-être un peu difficile à comprendre. :)

Citation

monClip.waitClick(maFonction);

avec la fonction play par défaut, ça enrichirait ce que tu as proposé… ?
J'ai pensé à quelque chose de similaire : ajouter une action qui permet de lancer une fonction. Comme ça on peut la glisser n'importe où dans la chaîne d'actions, et pas uniquement dans les actions qui l'accepte en paramètre.
Exemple :
monClip.waitClick().func (laFonction).end ();
monClip.wait(2).gotoFrame("laFrame").func(laFonction).end();


#16 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 21:30 PM

Voir le messagedada, le 21 January 2011 - 18:58 PM, dit :

Tu es le bienvenu. :)

Forcément, j'ai pas besoin de beaucoup d'encouragements… mais n'hésite pas à le dire si ça mériterais plutôt un autre sujet.



Voir le messagedada, le 21 January 2011 - 18:58 PM, dit :

Sympa. :) Et après tu dis que tu ne te sens pas capable d'ajouter une commande, alors que c'est plus facile ?... :P
1 - je suis assez surpris d'y être arrivé aussi facilement.
2 - mais je suis resté sur mon idée et j'ai creusé, plus concentré sur l'usage (la syntaxe finale) que sur le pattern en lui même.
3 - peut-être qu'ajouter une commande est 'facile' mais je reste 'figé' dès que j'arrive sur ton code. Trop de choses (périphériques ?) (peut-être ajoutées par FDT ?) (des sécurités sur les mauvais usages possibles par l'utilisateurs ?) (d'autres trucs mystérieux et ésotériques à mon niveau ?)… bref, je n'arrive pas à voir l'essentiel, à me plonger à l'intérieur. Je reste spectateur passif, je ne sais pas pourquoi.


Voir le messagedada, le 21 January 2011 - 18:58 PM, dit :

Cà n'en est pas loin d'être souple, il faut juste ajouter une couche d'abstraction, plutôt que de gérer uniquement un type Interpolation, il faut gérer un type plus abstrait Command (une commande contient une interpo, une autre un timeout, etc). :)
Là, déjà j'ai du mal.
Je pourrais très bien ajouter d'autres types sur le même principe, et me passer d'un type abstrait. En fait, je ne vois pas comment multiplier les instructions via un type abstrait.
Cas concret : j'ai implémenté l'interpolation, j'implémente le wait and play…
Mais…
ma classe abstraite Command, elle doit déclarer les instructions "fromXY", "toXY", plus les instructions "wait" et "play" … ?
Ça n'a aucun sens dans mon shéma de pensée.
Idem : si je retourne mon objet SuperSprite, au lieu de retourner ma 'commande', je ne peut pas pointer mes fonctions "fromXY" etc… ou alors elles doivent toutes être déclarées dans mon SuperSprite lui même…

En fait, est-ce que le Manager sert à ça ? Permettre de pointer une fonction à travers un objet qui ne définit pas lui même cette fonction mais la délègue/reçoit.transfère à un autre objet ?
Là, je suis face à un mur.


Voir le messagedada, le 21 January 2011 - 18:58 PM, dit :

J'ai pensé à quelque chose de similaire : ajouter une action qui permet de lancer une fonction. Comme ça on peut la glisser n'importe où dans la chaîne d'actions, et pas uniquement dans les actions qui l'accepte en paramètre.
Exemple :
monClip.waitClick().func (laFonction).end ();
monClip.wait(2).gotoFrame("laFrame").func(laFonction).end();
:) voui, c'est mieux parce que ça ouvre plus de possibilités. Mais dans ce cas, l'instruction waitClick ne doit pas déclencher le play… on peut vouloir déclencher une fonction après un clic sans "jouer" le target du click…

Si tu continue à me répondre et à m'inviter à continuer mes questions, je vais espacer mes remerciements et autre :Hola: sinon, ça finirait par être pesant. Mais je n'en pense pas moi.

#17 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 21 January 2011 - 22:10 PM

Citation

(peut-être ajoutées par FDT ?) (des sécurités sur les mauvais usages possibles par l'utilisateurs ?)
Les throw je les met lorsqu'en codant une méthode je me dis "si on l'appelle à tel moment ou de telle manière ça va merder". :) Une fois que le throw est là, ça merdra ptet à un moment, mais j'aurai le message qui me rappellera pourquoi. Normalement, ces erreurs concernent l'appli (en interne) et pas l'utilisateur, donc elles ne devraient jamais surgir si l'appli est bien codée. ^^

Cependant, comme rien n'est parfait (mais qu'on y arrive petit à petit) je mets aussi des throw là où l'utilisateur peut mettre l'appli en défaut. Ils ne sont pas définitifs, mais sont là en attendant de corriger le comportement problématique, comme un rappel "ha oui c'est vrai que si j'utilise l'appli comme ça, ça pète" (si on ajoute une liste de TODO et des tests unitaires on est blindé et ne devrait pas perdre de temps en débogage). :)

Citation

Cas concret : j'ai implémenté l'interpolation, j'implémente le wait and play…
Mais…
ma classe abstraite Command, elle doit déclarer les instructions "fromXY", "toXY", plus les instructions "wait" et "play" … ?
Ça n'a aucun sens dans mon shéma de pensée.
Dans le mien non plus. :) La commande doit encapsuler le code à exécuter. Donc qu'on exécute une commande Tween ou une commande PlaySound, on les utilise exactement de la même manière (le manager ne connaît pas les classes des commandes, il connaît juste l'interface). Mais bien sûr, au moment de la création de la commande, le clip lui passe dans le constructeur toutes les données dont elle a besoin pour s'exécuter. Et ça tombe bien puisque c'est le clip qui reçoit ces données de l'utilisateur Flash. :P Donc les méthodes "wait" et "play" sont sur le clip.

Citation

Idem : si je retourne mon objet SuperSprite, au lieu de retourner ma 'commande', je ne peut pas pointer mes fonctions "fromXY" etc… ou alors elles doivent toutes être déclarées dans mon SuperSprite lui même…
Maintenant que le clip a les méthodes sur lui... ;)

Citation

En fait, est-ce que le Manager sert à ça ? Permettre de pointer une fonction à travers un objet qui ne définit pas lui même cette fonction mais la délègue/reçoit.transfère à un autre objet ?
Tu te compliques. :) Toutes les fonctions du package sont utilisées sur la classe qui les déclare.

Citation

voui, c'est mieux parce que ça ouvre plus de possibilités. Mais dans ce cas, l'instruction waitClick ne doit pas déclencher le play… on peut vouloir déclencher une fonction après un clic sans "jouer" le target du click…
Oui, c'est l'avantage de faire des fonctions les plus simples possibles (un seul comportement), tu fais ce que tu veux après le waitClick, mais le waitClick en lui-même ne fait qu'attendre un click ; quand le click arrive il a fini son boulot, et on passe à la commande suivante si elle existe (si elle existe pas ici, on peut se demander pourquoi on a attendu un click :P).

Sinon, j'ai avancé un peu, mais surtout pour rectifier des trucs, comme le manager qui était statique. J'ai commencé à écrire quelques tests unitaires, histoire d'être sûr que les classes se comportent bien à long terme. :)

Pour l'instant, personne se manifeste pour participer au dev ^^, mais si quelqu'un a envie je mettrai les dernières sources à disposition, sinon ce sera plus tard, surtout le temps de nettoyer/tester/commenter. Après il faudra ajouter des actions pour que ça devienne bien testable dans Flash. :)

J'ai aussi ouvert un dépôt Mercurial sur https://bitbucket.org/ pour le contrôle de version, qui permet de versionner toutes les modifs, travailler à plusieurs en même temps, revenir en arrière, etc. :) Si quelqu'un veut coder, je pourrai lui expliquer comment ça marche, c'est rapide. :) En même temps c'est pas indispensable, si quelqu'un poste un zip des sources avec des modifs, je les intègrerai.

#18 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 21 January 2011 - 22:46 PM

Cogite…

Cogite…

Cogite…

OK.
Donc, la classe principale possède une méthode pour chaque type de … enrichissement ?…
la méthode crée l'enrichissement (mauvais choix de mot je crois que ça existe dans le vocabulaire dev), et le passe à son manager, qui lui, ne la voit qu'en temps que "commande". Son travail à lui consistant à stocker, enchaîner les 'commandes' à l'exécution.

Voilà pourquoi les instructions doivent être uniques. Un pointage de méthode == un enrichissement créé, et dans ce cas c'est OK : la méthode renvoie l'objet lui même. Comme ça on peut pointer une autre méthode pour créer un autre enrichissement.

En fait, c'est déjà un peu ce que j'ai commencé avec mon interface isExecutable… mais je dois abandonner l'idée de pointer plusieurs méthodes à la chaîne sur mon 'enrichissement' pour en profiter pleinement.

L'avantage de ma méthode, c'est de pouvoir souplement ajouter des paramètres, en omettre, avec une écriture très rédigée donc lisible. Par exemple : je peut faire une interpolation d'échelle, de position et d'alpha en même temps. Je ne vois pas trop comment tu ferais.
L'inconvénient : je ne peut poser qu'un enrichissement par ligne d'écriture.
C'est intéressant pour l'interpolation qui s'ouvre sur beaucoup de possibilités… ça n'a pas d'intérêt pour enchaîner un wait, un clic, une fonc, etc.

:) Je crois que c'est clair cette fois. :)
Merki

J'irai refaire un tour dans tes sources pour voir si je peut entrer dedans cette fois, mais je ne pense pas pouvoir apporter quelque chose.

#19 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 22 January 2011 - 00:20 AM

Citation

En fait, c'est déjà un peu ce que j'ai commencé avec mon interface isExecutable… mais je dois abandonner l'idée de pointer plusieurs méthodes à la chaîne sur mon 'enrichissement' pour en profiter pleinement.

L'avantage de ma méthode, c'est de pouvoir souplement ajouter des paramètres, en omettre, avec une écriture très rédigée donc lisible. Par exemple : je peut faire une interpolation d'échelle, de position et d'alpha en même temps. Je ne vois pas trop comment tu ferais.
Ta méthode ne doit pas être abandonnée. Si on veut paramétrer un objet en fluent interface, c'est exactement ce qu'elle fait et c'est une utilisation courante, regarde les exemples du wikipedia : http://en.wikipedia....luent_interface
Ma méthode n'est ni meilleure ni moins bonne, c'est juste qu'elle vise un autre but : enchaîner des actions, dont certaines sont asynchrones. Et comme tu dis, avec cette méthode je me prive de pouvoir paramétrer les objets comme tu fais. :)

Sinon, ton résumé est exact. ;)

Citation

mais je ne pense pas pouvoir apporter quelque chose.
Tu te trompes. :) Ajouter une commande est plus simple que coder ce que tu as mis dans le zip plus haut.
Je résume :
1) Créer une classe qui hérite de AbstractFluentInterfaceCommand
2) Prendre en paramètre du constructeur les infos dont on a besoin
3) Overrider la méthode _execute() pour lancer le truc à faire ^^
4) Appeller la méthode héritée dispatchComplete() une fois qu'on a fini le truc à faire (ça peut être immédiat comme dans la commande MovieClipPlayCommand -puisqu'on a rien à attendre- ou asynchrone comme dans WaitCommand).

La commande est finie. Et comme coder une commande simple prend 2 ou 3 lignes, ça va vite. :)

Maintenant, pour que l'utilisateur puisse déclencher la commande sur le clip, dans la classe MovieClipFluentInterface:
1) Ajouter une méthode publique qui prend les paramètres dont la commande a besoin,
2) Instancier la commande,
3) Appeller la méthode registerCommand() en lui passant la commande,
4) Retourner this

Et plus qu'à tester dans Flash. :)

Si tu veux une liste de commandes simples mais indispensables que j'ai dans la TODO :
- next() -> frame suivante
- prev() -> frame précédente
- nextScene() - prevScene() -> idem pour les scènes
- top() -> passe au premier plan du parent (si parent il y a)

Et une commande asynchrone pour s'amuser :) :
- playTo(frameLabelOrNum); Lire jusqu'à une image donnée. L'idée est d'écouter l'enterFrame du clip et le faire avancer ou reculer jusqu'à atteindre l'image donnée (ou un "bord" du scénario).

Je dis ça, c'est aussi pour ceux qui seraient tentés, te sens pas obligé. ;)

:)

#20 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 22 January 2011 - 01:08 AM

Voir le messagedada, le 21 January 2011 - 22:10 PM, dit :

Pour l'instant, personne se manifeste pour participer au dev ^^…

:lol: L'autre !
sous prétexte que quand il a une vague idée, 24 heures (sans sommeil) plus tard il a pondu moitié des classes kivonbien d'une idée aboutie, le voilà défaitiste ;)

Un joli wik se profile, ça va laisser du temps pour s'y essayer à ceux qui dorment la nuit :mrgreen:

De mon côté, je ne dis pas que je vais participer, mais crois bien que je vais fnouiller tes sources quand même… sait-on jamais…
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#21 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 22 January 2011 - 02:10 AM

Voir le messageNataly, le 22 January 2011 - 01:08 AM, dit :

sous prétexte que quand il a une vague idée, 24 heures (sans sommeil) plus tard il a pondu moitié des classes kivonbien d'une idée aboutie, le voilà défaitiste ;)
Meuhhh non. ^^ C'était juste une remarque. L'essentiel sera de voir ce que ça donne côté Flash, à l'utilisation. :)

#22 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 22 January 2011 - 03:19 AM

bon alors, je suis formelle Dada, c'est encore mieux que ikéa :

le kit est téléchargeable (pas à manutentionner ds les escaliers les carton lourds comme tout), et le mode d'emploi simple et clair.
Juste à suivre dans l'ordre, même pas besoin de comprendre !

Pas de visses en trop à la fin. :mrgreen:

:Hola:


[donc pour jouer : next et prev et l'interface (bel effort :lol: )]

Fichier(s) joint(s)


Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#23 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 22 January 2011 - 10:07 AM

Bon, donc là, j'ai copié par dessus l'épaule de ma voisine…

Jusque là c'est pas dur.

Je vais tenter les autres TODO faciles alors, avant que ququ'un me pique la sinécure, la gloire les lauriers…

J'ai laissé ensemble nextFrame, prevFrame et j'ai ajouté nextScene et prevScene. Je suppose que c'est mieux comme ça ? Ou pas ?

Fichier(s) joint(s)



#24 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 22 January 2011 - 12:39 PM

\0/ Dldler \0/

Ayé ? Tu veux bien jouer avec nous ? T'arrête de nous snober avec ta pelle et ton râteau à toi ?

Hey ! Je blague :P justement pcq je suis jalouse que ma volonté à m'y essayer (à concevoir un truc ds mon coin) avant de 'regarder la réponse' ait aussi pitoyablement succombé à la curiosité…

En tous cas je ne regrette pas d'avoir ouvert une conversation pour réhabiliter lidéheu et les techniques de dessin et d'animation…

Il y a un adage qui dit "quand on force les choses dans un sens on obtient le contraire…"

… ça continue donc de se vérifier :mrgreen:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#25 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 22 January 2011 - 17:37 PM

Voir le messagedada, le 21 January 2011 - 22:10 PM, dit :

J'ai aussi ouvert un dépôt Mercurial sur https://bitbucket.org/ pour le contrôle de version, qui permet de versionner toutes les modifs, travailler à plusieurs en même temps, revenir en arrière, etc. :) Si quelqu'un veut coder, je pourrai lui expliquer comment ça marche, c'est rapide. :) En même temps c'est pas indispensable, si quelqu'un poste un zip des sources avec des modifs, je les intègrerai.

Si d'aventure je devais continuer à jouailler - ds les limites de ce dont je suis capable - ce serait effectivement bien qu'on s'organise pour plomber le moins de temps possible dans des conneries de manutention de sources d'un disque à l'autre avec tous les risques de marchage-dessus que ça implique.

Auquel cas… :oops: Banaba, va falloir lui expliquer. Et lentement, encore, et patiemment qui plus est ;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#26 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 22 January 2011 - 19:32 PM

Merci Dldler. :)

Citation

Je vais tenter les autres TODO faciles alors, avant que ququ'un me pique la sinécure, la gloire les lauriers…
Ok, et si tu as d'autres idées, genre trucs utiles et récurrents dans une anim... :) J'ai aussi noté quelques trucs en vrac que je posterai après les avoir un peu organisé.
Le tout c'est qu'on ne fasse pas la même chose, mais pour l'instant je ne vais pas ajouter de nouvelles commandes mais revoir d'autres parties du code histoire que la base fonctionne mieux. :)

Citation

Si d'aventure je devais continuer à jouailler - ds les limites de ce dont je suis capable - ce serait effectivement bien qu'on s'organise pour plomber le moins de temps possible dans des conneries de manutention de sources d'un disque à l'autre avec tous les risques de marchage-dessus que ça implique.
Si tu veux c'est possible, j'ai pris l'offre gratuite qui permet d'ajouter 4 utilisateurs en écriture. D'un autre côté l'ajout d'une commande c'est une classe et une méthode, donc ça reste quand même facile à intégrer. :)

#27 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 22 January 2011 - 20:06 PM

Moi j'aimerais savoir comment tu t'en est sortie avec la static :)

#28 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 22 January 2011 - 20:22 PM

Voir le messagegoabonga, le 22 January 2011 - 20:06 PM, dit :

Moi j'aimerais savoir comment tu t'en est sortie avec la static :)
:) Un seul manager de commandes pour tous les clips de l'animation, c'était pas top en effet... :mrgreen: C'était un choix rapide pour avoir une base à tester déjà. ;)
Hier soir j'ai un peu arrangé ça, pour déjà pouvoir diriger plusieurs clips en même temps (plusieurs managers qui vont se mettre dans un vector une fois lancés). Mais il manque encore une couche (un manager de managers.. :P), que je vais pas tarder à essayer d'ajouter. ^^

Je sais pas si je pourrai poster ce soir... :roll:

#29 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 22 January 2011 - 20:38 PM

Des idées de commandes en vrac, j'en ai d'autres mais il faudra que je regarde de plus prêt comment les gérer.

Citation

- playTo(frameNameOrNum, speed = 1); Lit jusqu'à une image, peu importe le sens de lecture, et permet de choisir la vitesse.
- playTime(time); Lire pendant un temps. Raccourci de playIt().wait().stopIt().
- waitLoad(loaderInfo); Attend que le swf soit complètement chargé
- url (url, target = "_self"); Ouvre l'url dans le target donné
- func (f, args = null); Exécute une fonction en lui passant les paramètres

- top(); // Passe au 1° plan du parent
- add(parent) : ajoute le clip dans le parent
- remove ();

- visible(Boolean);
- alpha(alpha);
- vol(vol); Volume général du FP
- pan(pan); Pan général du FP
- pos (x, y); // Positionne
- size (w, h); // Dimensionne
- rot (angleDegres); // Tourne

- cmd (cmd); Ajoute la commande.

Il y a aussi l'idée des tween.
De mon côté j'ai commencé les events, et je pense à des commandes conditionnelles ( ex : equal(var, value) ) qui auraient la possibilité d'annuler toute les commandes derrière elles (en envoyant un event cancelAll) mais cà sera possible qu'un peu plus tard. :)
D'autres dans le même genre pourraient après voir le jour : times(1) autoriserait la séquence d'actions à ne s'exécuter qu'une fois (dans le cas par exemple d'une image clef sur laquelle on repasse souvent). :)

#30 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 23 January 2011 - 10:09 AM

Bon, bon, bon…

Quelques heures plus tard…

… en fait, je ne peut pas tester because version CS3 chez-moi, et donc point de Vector…

Du coup, j'ai écrit quelques classes mais je ne peut pas les tester… et je suis presque sûr qu'il faut faire des 'trucs' en plus.


Bon :
il y a dans le tas :
prev et next de Nataly, puis

- prevScene et nextScene
- alpha(number)
- pos(number,number)
- rot(number)
- top
- visible(boolean)
- size(number,number)

un ajout personnel :
- scale(number,number=null)
Normalement : 1 ou 2 paramètres au choix. Si un seul : scale sur scaleX et scaleY identique. Si deux : scaleX et scaleY différents.

Voilà, sauf que je m'attendais à avoir des soucis d'override de propriéétés, comme alpha, visible, etc… mais comme je ne peut pas tester, ça reste un peu en plan.

Fichier(s) joint(s)

  • Fichier joint  oops.zip   10.38 Ko   15 téléchargement(s)


#31 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 23 January 2011 - 14:28 PM

Voir le messageDldler, le 23 January 2011 - 10:09 AM, dit :

Voilà, sauf que je m'attendais à avoir des soucis d'override de propriéétés, comme alpha, visible, etc… mais comme je ne peut pas tester, ça reste un peu en plan.


Alors… oui et non ;)

non, pcq ce n'est pas MovieClip que tu surcharges mais AbstractFluentInterfaceCommand (hey c'est invivable des noms anglais et à raloooooonge moi j'y engloutis 88% de mon cpu perso :mrgreen: )

                override protected function _execute():void {
                        _target.visible=_bool;
                        dispatchComplete();
                }
 
regarde le visible est appliqué à _target qui est le clip lui même… ;)


oui (les soucis) pcq tu utilises les mots réservés : visible, nextFrame et tout ça ;)

j'ai seulement changé visible en affiché (oui je sais ça vous plaira pas pcq c'est en français et avec un accent - moi même, les accents… même si… ça me fout tj la trouille… :?) Et tout va bien ;)

j'ai un peu mis des commentaires sur tout le reste, pcq je vous laisse vous battre de la nomenclature, et que je vais avoir bcp de mal sur ce projet à cause de la dite nomenclature.
(Mais il faut laisser les jeunes fabriquer le monde qui sera leur, je ne la ramène donc pas)

j'ai sur ma todo perso de faire le croquis de la structure, ça pourrait t'aider, mais comme je ne pratique pas l'ultra leger motorisé uml, ça risque de te nuire plus qu'autre chose :?

Fichier(s) joint(s)


Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#32 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 16:57 PM

Salut,

Merci Dldlier et Nataly. :)

Oui, il faut modifier les noms pour qu'ils soient différents de ceux de l'API de MovieClip. Je l'ai fait par exemple pour next/prevScene qui deviennent next/prevSc. D'ailleurs j'ai fait une modif dessus aussi, je savais pas qu'elles devaient être ciblées sur le root... ^^ Donc j'ai ajouté une tentative d'accès au root, et si elle échoue la commande envoie quand même son event COMPLETE.

Pour CS3 en effet il y a un problème avec les Vector car il ne publie que pour le Flash Player 9, j'ai pensé faire une autre branche avec Mercurial (le logiciel de contrôle de version dont je parle plus haut) qui utilise des Array au lieu des Vector, je regarderai ça. ;)

Citation

j'ai seulement changé visible en affiché
Je rechangerai. :P Restons à l'anglais, qui a une portée plus large. :)

Citation

j'ai un peu mis des commentaires sur tout le reste, pcq je vous laisse vous battre de la nomenclature, et que je vais avoir bcp de mal sur ce projet à cause de la dite nomenclature.
OK, j'ai commencé à en mettre aussi, j'intègrerai les tiens.

Citation

j'ai sur ma todo perso de faire le croquis de la structure, ça pourrait t'aider, mais comme je ne pratique pas l'ultra leger motorisé uml, ça risque de te nuire plus qu'autre chose
Je peux m'en occuper si tu veux. J'ai changé des choses dans la structure, mais l'utilisation est toujours la même.

Je récupère vos zip, et dans pas longtemps j'en upload un nouveau avec toutes les modifs et quelques explications. :)

#33 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 23 January 2011 - 17:30 PM

Voir le messagedada, le 23 January 2011 - 16:57 PM, dit :

Je peux m'en occuper si tu veux.

owi ! :Hola:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#34 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 17:48 PM

Voir le messageNataly, le 23 January 2011 - 14:28 PM, dit :

(hey c'est invivable des noms anglais et à raloooooonge moi j'y engloutis 88% de mon cpu perso :mrgreen: )
Je t'accorde que les noms sont lourds à porter. :) Dans la mise à jour j'ai enlevé "Interface" déjà, ça s'améliore. :P

#35 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 23 January 2011 - 17:51 PM

A propos de nomenclature, je me demandais si ce ne serait pas une bonne idée que décider d'un système de nommage qui permette de "deviner" la nom de la commande, plutôt qu'être obligé de se gaver tout un jeu de vocabulaire nouveau :roll:

je pense à préfixer ou suffixer d'une chaine dont on déciderait une bonne fois pour toutes (un d au hasard)



:)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#36 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 20:31 PM

Hop là. :)

Je joins un zip avec les mises à jours qui ont été postées ci-dessus et les miennes.
Le moteur a été amélioré et testé et on a plus de commandes.

Dans le FLA (format CS4) il y a un exemple simple d'utilisation que je colle ici pour ceux qui ont CS3.
La classe de Document est configurée sur MyFlashApplication (le FLA étant dans le dossier "src") et un clip nommé "rond" est exporté pour AS avec comme classe de base : dada.flashfluentinterface.movieclip.FluentMovieClip

En 1° image il y a ce code :
pause().wait(2).start().end();
qui met la lecture du scénario en pause, attend 2 secondes, puis lance la lecture.
A partir de là il y a une petite animation.
En image 30, le code :
pause().context(rond).click().context(this).goto("départ").end();
qui pause la lecture, attend un click sur l'objet rond, puis retourne à l'image 1 (du scénario principal) qui a pour étiquette "départ".

Actuellement, les commandes disponibles sont :

Citation

* pause()
Stoppe la lecture du scénario.

* start()
Démarre la lecture du scénario.

* goto( frame:*, scene:String = null )
Se rend à l'image/scène et stoppe.

* wait( delaySeconds:Number )
Attend un temps en secondes.

* click( id:String = null )
Attend un click.
Note : Le paramètre id, qui peut prendre n'importe quelle valeur texte, permet d'identifier
cette "action d'écoute d'évènement".
Il n'a d'intérêt que dans un cas particulier : si cette commande est utilisée
dans un clip qui la relance régulièrement sans forcément vérifier que l'évènement
attendu est arrivé (un clip qui tourne en boucle, peu importe que l'évènement
arrive ou non).
Dans ce cas, donner un id permet d'éviter d'entasser des séquences de commandes
qui attendent toutes ce click.


* next()
Se rend à l'image suivante.

* prev()
Se rend à l'image précédente.

* nextSc()
Se rend à la scène suivante.
Note : si le clip sur lequel on utilise cette commande n'est pas affiché,
la commande ne fera rien.


* prevSc()
Se rend à la scène précédente.
Note : si le clip sur lequel on utilise cette commande n'est pas affiché,
la commande ne fera rien.


* func( func:Function, args:Array = null, thisObject:Object = null )
Exécute une fonction.

* op( num:Number )
Modifie l'opacité du clip (0=transparent, 1=opaque)

* rot( rotation:Number )
Modifie la rotation du clip.

* scale( scaleX:Number, scaleY:Number = NaN )
Modifie l'échelle du clip.
Si seul le 1° paramètre est renseigné, il est appliqué en horizontal et vertical.

* size( width:Number, height:Number )
Modifie la taille du clip.

* top()
Fait passer le clip au premier plan.

* shown( bool:Boolean )
Rend le clip visible ou invisible.

* context( newContext:FluentMovieClip )
Permet de changer le contexte des commandes suivantes.

* end()
Une ligne de commandes doit toujours se terminer par end().

D'autres commandes viendront plus tard, et si vous avez envie d'en voir certaines, faites-en la demande. :)

En priorité dans la TODO : faire une version CS3. :)
Et publier des SWC (CS3, CS4) pour ceux qui veulent seulement utiliser sans forcément avoir les sources.

Cet outil étant pensé essentiellement pour faciliter le travail de l'animation (en permettant de simplifier les taches récurrentes liées au code), j'en appelle aux animateurs et à leurs besoins exigeants pour donner des retours, dire ce dont ils ont besoin, rapporter des bugs, etc... :D

Fichier(s) joint(s)



#37 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 23 January 2011 - 20:50 PM

pourquoi un singleton dans le FluentSequencesManager ?
pourquoi tu ne le globalise pas ?

#38 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 21:01 PM

J'ai mis à jour le zip car une option que je testais avec Flex Formatter s'est un peu emballée (la génération de sections -Functions, Properties, etc-). C'était plus clair avec des sections, mais bon, en avoir 15 identiques d'affilé c'est pas plus clair... :mrgreen:

Voir le messagegoabonga, le 23 January 2011 - 20:50 PM, dit :

pourquoi un singleton dans le FluentSequencesManager ?
pourquoi tu ne le globalise pas ?
Tous les clips délèguent leurs commandes et la gestion de séquences à cette classe. Et comme on ne maîtrise pas la création des clips (ils sont dans la biblio où déjà sur la scène) c'est eux qui vont chercher le Singleton. :)
Au niveau de l'archi, ya sûrement des choses qui peuvent s'améliorer, mais il ya aussi des contraintes liées à la création des clips dans Flash. :)

#39 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 21:40 PM

Et donc, une version qui compile avec Flash CS3 :)

Fichier(s) joint(s)



#40 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 23 January 2011 - 22:41 PM

Bonsoir…

… je cogite un peu et je tente de faire le point.

Pour l'usage d'abord…

- on a donc besoin de déclarer son fichier Flash principal comme étendant AbstractFluentMovieClip
- ensuite, tous les moviesclips que l'on veut fluentoriser doivent étendre aussi AbstractFluentMovieClip ?
- ça veut dire que tous les objets que l'on veut manipuler doivent être partagés pour ActionScript dans la bibliothèque ?

Oui, en fait je suis désolé, mais tout d'un coup j'ai des doutes sur l'usage.
Ce qui est très attirant, c'est l'écriture des commandes.
Mais ça fait beaucoup de contraintes en contrepartie… des gestes pas habituels quand on fait de l'anim tradi…
Y a aussi cet histoire de vocabulaire qu'il faut réapprendre…

D'un autre côté, je me rends compte que les commandes que j'ai écrites n'ont pas été très utiles. Ça ne me gène pas en temps que tel parce que, moi, j'ai beaucoup appris dans cette mini-aventure. Mais je n'ai pas le sentiment de faire avancer le schmilblick en fait.

En fait, et pour être tout à fait sincère… je commence à avoir du mal à m'intéresser. Mon cerveau ne s'amuse plus…
Du coup, je cogite un peu en solitaire, dans ma direction du début.
Où plutôt : entre ma première version façon tween et la version avec le pointage à rallonge.

Si on/je créait/s une classe (abstraite ?) disons Interpolation (mais j'ai des doutes même sur le nom), qui elle serait Fluent… Elle pourrait peut-être manipuler des MovieClips sans qu'ils soient exportés pour ActionScript…

Ça s'utiliserait comme ça :

var interpol:Interpolation = new Interpolation().
var mc:MovieClip=new MovieClip()
interpol.cible(mc).play(50).stop().etc…

La forme n'est pas encore très claire, mais j'intuitionne des avantages :
en ayant une classe (abstraite ?), du coup, tous les mots-cléfs des MovieClips redeviennent disponibles. L'apprentissage du vocabulaire est instantané :

interpol.rotation(30).gotoAndPlay(20).etc…

On pourrait donc préparer une 'animation/interpolation' genre mouvement de rollUp sur un bouton… attente du clic etc…

// Puis :
interpol.target(bouton1).end();
// Et ailleurs :
interpol.target(bouton2).end()

Bon, ce n'est qu'une idée, je fonctionne en comparaison, je ne vois pas du tout encore comment introduire un tween là dedans… et je suis un peu effrayé quand je vois le code nécessaire version Dada. Mais je crois que je vais me laisser tenter quand même.

Voilà. J'espère qu'il y aura des animateurs pour tester ta/votre version, et que les freins que j'imagine ne seront pas si importants que ça. :D de toute façon, je compte bien suivre ce sujet quand même pour continuer d'y apprendre plein de trucs…

/////////

Bon, je me suis bien relu 5 fois, j'ai tout réécrit 2 fois :) ce message reste totalement décousu… à mon grand regret et sans doute pas à mon habitude :P mais je vais le poster quand même.
;)

#41 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 23 January 2011 - 22:59 PM

Citation

- on a donc besoin de déclarer son fichier Flash principal comme étendant AbstractFluentMovieClip
Seulement si tu veux utiliser la syntaxe sur le scénario principal.

Citation

- ensuite, tous les moviesclips que l'on veut fluentoriser doivent étendre aussi AbstractFluentMovieClip ?
Pour l'instant oui, car le but est de faire au plus simple pour l'utilisateur, le clip étant lié à la classe, on script directement dedans.
Mais je vais penser à ta réflexion, j'ai déjà un peu anticipé d'ailleurs car j'ai un TODO du même acabit.
Pouvoir diriger un clip avec une autre instance est faisable, et du coup le clip n'a pas besoin de liaison particulière.
var manager:LeManager = new LeManager (leClip);
manager.start().wait(2)... etc

A ce moment, comme LeManager n'hérite pas de MovieClip il peut avoir les mêmes noms que les propriétés/méthodes de MovieClip, pour celles qui existent déjà en tout cas.
Ca correspond avec ce que tu dis plus loin. :)


Citation

Mais ça fait beaucoup de contraintes en contrepartie… des gestes pas habituels quand on fait de l'anim tradi…
Mis à part l'export des clips (qui du coup peut être optionnel), quelles contraintes vois-tu ? Et pour les "gestes" je comprends pas. :)

Citation

D'un autre côté, je me rends compte que les commandes que j'ai écrites n'ont pas été très utiles.
Pourquoi pas très utiles ? C'est sûr que nextFrame et prevFrame c'est assez rudimentaire, mais incrusté dans une logique de séquence d'actions ça peut servir.

L'ajout des tween ça viendra. :)
Après c'est sûr qu'il y aura de nouveaux noms de méthodes (pour celles qui n'existent pas déjà sur MovieClip), mais ceux actuels ne sont pas forcément définitifs, ça dépendra des retours.

#42 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 23 January 2011 - 23:05 PM

Voir le messageDldler, le 23 January 2011 - 22:41 PM, dit :

- on a donc besoin de déclarer son fichier Flash principal comme étendant AbstractFluentMovieClip

Sauf à ce que ça ait changé depuis que j'ai joué avec les deux pov premières commandes, non, il suffit que le clip concerné étende chepukoiaralonge ;)


Citation

- ça veut dire que tous les objets que l'on veut manipuler doivent être partagés pour ActionScript dans la bibliothèque ?

ça c'est pas un souci, si c'est l'idée de la saisie à la chaine qui t'ennuie, (depuis que j'ai découvert que c'était tout niais d'ajouter des scripts dans le menu commandes pour le faire à la chaine, on me tient plus ;))

Citation

Oui, en fait je suis désolé, mais tout d'un coup j'ai des doutes sur l'usage.
Ce qui est très attirant, c'est l'écriture des commandes.
Y a aussi cet histoire de vocabulaire qu'il faut réapprendre…

de mon point de vue c'est utile avec les quelques premières commandes très basiques : wait, goto, stop…

Ensuite, je ne sais pas, s'il s'agit de coder (au final) des animations avec une syntaxe exigeante, des règles/compréhensions, en gros utiliser un autre mini langage… :? :roll:

Justement je suis curieuse des autres points de vue

Citation

Voilà. J'espère qu'il y aura des animateurs pour tester ta/votre version, et que les freins que j'imagine ne seront pas si importants que ça. :D de toute façon, je compte bien suivre ce sujet quand même pour continuer d'y apprendre plein de trucs…

En vrai, moi c'est ça qui me plait : apprendre plein de trucs. Genre les tests unitaires (enfin quand je dis apprendre… comment j'y vais ! rencontrer je vais dire ;))

Citation

je vais le poster quand même.

t'as bien raison ! :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#43 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 24 January 2011 - 00:19 AM

il y'a longtemps ( quand je ne connaissais pas RobotLegs ) j'avais pondu une librairie dans l'idée pour une graphiste, mais elle ne comprenais même pas la liaison d'un clip à sa class, et du coup j'avais pensé la lib plus simplement.

En gros dans une frame elle faisait juste un appelle à une function global et ajouter l'import vers le package contenant cette function.

initAnimator(target:DisplayObject); ( celle si initialiser le Manager en global et non pas en static (singleton) si il n’étais pas existant ... et ajouter la target au manager .. ).


Peut être que DADA comprendra ce que je raconte ....

#44 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 January 2011 - 00:47 AM

:lol: Goa ! Tu es d'une délicatesse saisissante :lol:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#45 dada

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 8510 messages

Posté 24 January 2011 - 01:38 AM

Mise à jour avec la possibilité de diriger un clip ou la scène sans liaison avec une classe, et avec les mêmes noms que sur la classe MovieClip. ;)

L'exemple est dans MyFlashApplication_testProxy.fla.

L'autre méthode fonctionne toujours, mais certains noms sont différents (héritage de MovieClip oblige). C'est au choix... ^^

Fichier(s) joint(s)





1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)