Télécharger le zip
Questions/Remarques :- Pourquoi n'étends-tu pas TextField directement plutôt que de faire un Sprite dans lequel tu places un TextField ?- Pourquoi ne pas mettre un Timer permettant de gérer le flux de texte plutôt que de rendre tout ça dépendant du FrameRate ?- La classe externe dépends trop du contenu du fla pour être réellement utile.- Les principes d'AS3 ne sont pas encore bien encrés, ça sent vraiment trop l'AS2 tout ça. ("with", par exemple)- Le formatage de texte devrait être passé en paramètre plutôt que de passer quelques propriétés à la volée dans la classe.- En pus du Timer, des méthodes play/stop/pause/resume et la propriété loop pourrait compléter la maniabilité de l'ensemble.Peg'
Tu devrais extériorisé le style du texte et du champ.C'est indépendant de l'effet. Voici ce que je te conseille:package { import flash.display.* ; import flash.text.* ; import flash.events.* ; public class TextDefilant{ public static function afficher( $champ:TextField, $texte:String, $lettreParImage:uint=1 ):Function{ // // Fonction chargée de libérer des écoutes ********************************* function libererEcoutes( e:Event=null ):void{ // Suprime l'ecoute de l'enterFrame... $champ.removeEventListener( Event.ENTER_FRAME, aChaqueImage ); // // Suprime l'écoute de libération... $champ.removeEventListener( Event.REMOVED_FROM_STAGE, libererEcoutes ) ; } //************************************************************************* $champ.addEventListener( Event.REMOVED_FROM_STAGE, libererEcoutes ); // Au cas ou quelque'un supprimerais le champ du stage, avant que l'enterFrame ne s'autosuprime. // Ainsi tu es sur que si l'anim n'est pas finie, à se supprimer du stage, elle se libérera de l'écoute. $champ.addEventListener( Event.ENTER_FRAME, aChaqueImage ); // On lance l'animation à travers l'enterFrame... var longueurAffichee :int= 0 ; // Le nombre de caractère actuellement affiché... // Fonction chargée d'afficher le texte *********************************** function aChaqueImage( e:Event):void{ $champ.text= $texte.substr(0,longueurAffichee) ; longueurAffichee+= $lettreParImage ; // // Si tout est affiché, libérer des écoutes if( longueurAffichee>= $texte.length ) libererEcoutes(null); } //************************************************************************* return libererEcoutes ; // On retourne la fonction annulant l'affichage et libérant des écoutes. // Ainsi tu puex VOLONTAIREMENT interrompre l'affichage en cours par éxécution // de la méthode retournée... } }}Comme ca tu n'as pas besoin de créer d'instance.Tu l'utilise comme ca :var monChamp :TextField= new TextField();monChamp.defaultTextFormat= new TextForamt("maPolice",maTaille,maCouleur);TextDefilant.afficher( monChamp, "LE TEXTE QUE JE SOUHAITE VOIR AFFICHER", 2 ) ;Et voila !!!
Pour Peg...WITH n'est absolument pas une fonction à éviter en AS3.Au contraire c'est une fonction bien utile. Regardes l'aide:http://help.adobe.com/fr_FR/AS3LCR/Flash_10.0/statements.html#withEt tu verras...; )
Bonjour, merci pour vos commentaires, pour vos idées d'amélioration, je vais essayer de retravailler tout ça, mais je ne suis pas sur d'y arriver, je suis vraiment débutant !
lettreParImage permet à l'utilisateur de faire varier la vitesse du texte ?
La vitesse non...Le nom de lettre nouvelle à chaque image !Mais là je doute. Le code est de toi ???
Si il ya 3 lettres par images, le texte s'affichera entierement plus vite que 2 lettres par images, en gros la vitesse.
Et si je veux mettre une lettre par secondes ?Peg'
MAXOUYE: Tes questions me laisse bouche bée...public static function afficher( $champ:TextField, $texte:String, $lettreParImage:uint=1, $imagesParAjout:uint=5 ):Function{...var imagePassee :uint= 0 ;// Le nombre d'image pour ajuter du texte...var longueurAffichee :int= 0 ;// Le nombre de caractère actuellement affiché...function aChaqueImage( e:Event):void{if( ++imagePassee== $imagesParAjout ){ image= 0 ; $champ.text= $texte.substr(0,longueurAffichee) ; longueurAffichee+= $lettreParImage ; // // Si tout est affiché, libérer des écoutes if( longueurAffichee>= $texte.length ) libererEcoutes(null);}...Et voilà si ton animation est de 50 images par seconde, tu met 50 !Et si tu connais pas le frameRate, tu le calcule.Et si tu veux que ca fasse le café,tu incorpore une cafetière...= )
ça existe les cafetières avec port usb ?
ouais : http://www.informanews.net/imagenews/tasse_cafe.jpgPeg'
TROP FORT !!!!
ce code en AS3 est d'une grande clarté pour comprendre comment est structurée une application Flash, merci !il serait intéressant d'en faire une version "sonore" pour les enfants qui apprennent à lire, en leur proposant de s'enregistrer, de s'écouter, et d'entendre la bonne prononciation.
Je vois écrit "niveau débutant". Ce niveau souvent ignoré...Cette source est parfaite pour un débutant : facile à lire, configurable, utilisable "dans le monde réel".Les améliorations proposées, désolé de le dire, ne sont pas du même niveau.Alors je mets 10.
C'est en fait ce que je n'osais pas répondre aux premiers commentaires, ils me donnent des bonnes idées d'amélioration, mais le niveau débutant de ce code est mon niveau, mais j'ai quand même fait l'effort d'aller sur google et de regarder la signification de frameRate etc. Merci pour le 10, Fallait pas :)
Le but de ce site reste d'apprendre et de faire partager aux autres les connaissance afin de progresser.Partager une source ou un code de "niveau supérieur" (je ne suis pas certain que ce terme convienne bien) permet de voir comment faire pour améliorer le projet initial ... à moins de préférer rester sur ces acquis et à ce stade, aucun interêt de poster une source ici.Peg'Admin Codes-Sources
Je n'ai pas envie de lancer de polémique et je comprends l'envie de tirer le forum vers le haut. Je réagis simplement au fait (après avoir regardé les autres sources de l'auteur) que celui-ci n'a que 14 ans et ne poste pas des sources "débiles". Poster afin de partager et recevoir des réponses exaspérées ou pédantes, qui font 4 fois la longueur du code original est certainement le meilleur moyen de donner envie d'améliorer le projet initial.Cela m'enlèverait personnellement toute envie de remettre une source de quelque niveau que ce soit. La première réponse de Maxouye était pourtant plutôt claire. Je ne sais pas si le code visible ici est le code original ou s'il a été retouché. Je ne sais pas si l'auteur l'a trouvé et adapté ou s'il l'a fait lui-même. Son côté rapide et prêt-à-l'emploi convient tout simplement à un débutant, qui pourra s'en servir dans un premier temps, le comprendre ensuite, l'améliorer peut-être.
Certes !Mais ça fait toujours pas le café ;)
Quoique, il suffit d'y ajouter les lignes suivante :var cafe:Boisson = new Boisson(mouture, eau);cafe.addEventListener(Event.COMPLETE, function(e:Event):void { trace ("C'est prêt!")cafe.preparer(2,10, public function preparer(mouture:int, eau:int, longueur:int, bSucre:Boolean):Cafe { for(var l:int=0;l<longueur;l++){ cafe.ajouter(eau, l); cafe.integrer(moutureFine,l/20+Math.sin(l)); } dispatchEvent(new Event(Event.COMPLETE)); cafe.sucrer(bSucre); return cafe;}
c pas mal,avec un petite classe Percolateur, et une fonction statique du genre :public static function preparer(...):Boisson { ... }je pense que ça pourait le faire ;-)
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 873 282 membres 107 nouveaux aujourd'hui 16 151 membres club