Algo - Défilement de texte "doux" [Résolu] - Flash/ActionScript - Programmation
Marsh Posté le 15-12-2005 à 13:49:41
Comment récupères-tu la largeur de ton champs texte ? .. simplement avec _width ?
Marsh Posté le 15-12-2005 à 13:56:24
Du champ de texte oui.
j'ai peut etre trouvé une formule :
Taille Variable totale - Taille Champ - ((n - (Taille champ / Taille motif))* Taille Motif
Je vais l'essayer
EDIT : je crois que j'ai inversé qqchose la dedans...
Marsh Posté le 15-12-2005 à 14:03:52
Non, attends ..
La récupération de la taille d'un champs texte dynamique juste par _width n'a jamais et n'est toujours pas efficace ...
Essaye ça :
Code :
|
Tu risques d'avoir une belle surprise ... dans le pire des cas, 4 valeurs différentes .. dans le meilleur, seulement 3 ..
A mon sens, la version TextFormat.getTextExtent() est la meilleure car elle tient compte de la géométrie réelle de la police ( récupérée dans le TextFormat ) ...
A tester ...
Marsh Posté le 15-12-2005 à 14:09:57
Ah oui mais non, je parlais de la taille du champ de texte (le contenant), pas de la taille de la variable que je veux afficher (le contenu)
Pour la taille de ma variable en pixel, j'ai bien utilisé TextExtent
Je reviens éditer dans 2 minutes pour mettre mes calculs dans le code
EDIT : voila ca donne ca, mais la derniere formule n'est pas encore bonne je pense...
Code :
|
Marsh Posté le 15-12-2005 à 14:16:42
c'est vachement compliqué je trouve votre truc il serait pas plus simple de faire defiller en boucle son champs texte (technique du panoramique)
EDIT: enfin ca permet d'experimenter des nouveaux trucs ce qui n'est jamais un mal
Marsh Posté le 15-12-2005 à 14:23:37
C'est quoi le principe? (chercher technique panoramique flash et ca me sort des références d'appareils photo...)
Marsh Posté le 15-12-2005 à 14:36:02
tu crée deux occurences (identiques ou pas suivant l'effet rechérché) de texte et tu modifie leur _x toutes les frames, quand elle sont en dessous (ou au dessus dans le cas d'un defilement -> ) d'une certaine valeur tu leur rajoute la somme des deux texte._width
Marsh Posté le 15-12-2005 à 14:57:02
Euh, j'ai du mal a saisir le principe (l'interet de l'utilisation de deux champs de texte).
Sinon c'est bien la meme chose (le princip du défilement quoi) :
Code :
|
Mais le problème c'est bien de savoir ou se repositionner...
EDIT : ya plein de conneries dans mon code 3 posts plus haut, je corrigerais ca quand j'aurais trouvé la bonne formule.
Marsh Posté le 15-12-2005 à 15:24:52
tu fait un texte statique dans lequelle tu ecrit bonjour, clic droit dessus => creer symbole => clip tu colie colle ton clip pour en avoir deux identique sur ta scene, tu nomme le premier texte1_mc et le deuxieme je te laisse deviner
dans ta frame un truc de ce genre te donneras l'idee general:
Code :
|
a toi de comprendre a quoi sert limite
Marsh Posté le 15-12-2005 à 15:45:59
Soit j'ai rien compris, soit tu as mal lu ce que je souhaite faire.
Ton cas ne prend pas en compte les variables plus grandes que le champ texte lui meme, vu que tu joues sur les coordonnées et non pas sur le texte lui meme. Prendre les 2 en compte compliquerais davantage le problème.
Ca ne prend pas en compte non plus les variables trop courtes (style le "bonjour" du dessus), puisque tu te limites à 2 champs...
Limite sert apparement a définir l'espace entre tes 2 champs qui défilent, mais bon, je ne pense pas que cette solution convienne a mon problème.
J'ai vraiment l'impression que la méthode de récupération de la taille d'une variable texte dans un champ est completement à l'ouest.
En partant d'un endroit quelconque sur la variable, si j'y soustrais la taille du motif, je ne retombe pas sur le meme caractere sur le motif précédent... comprend pas...
Marsh Posté le 15-12-2005 à 16:04:41
Normalement, ceci devrait fonctionner...
Code :
|
Mais ca ne fonctionne pas...
Dans la formule le "1" a été choisi arbitrairement, puisque je n'ai pas encore trouvé de combien de motif je pouvais "reculer" pour revenir au premier...
Mais meme la, je ne reviens sur le meme caractere du motif précédent...
Marsh Posté le 16-12-2005 à 09:36:44
Tested & approved : la méthode getTextExtend, c'est du pipeau...
Ca renvoie n'importe quoi...
Je viens de remplir mon champ texte de 'i', au final il y a environ 100 pixels de différence entre la taille du champ et la taille du texte du champ (480 pour mon champ, 385 pour le texte)
Bon bah je vais essayer une autre méthode...
Citation : # trace(tonChampsTexte._width); |
La 1ere ce n'est pas ce que je veux
La 2eme je ne connais pas et je vais essayer
La 3eme n'existe pas, l'objet obtenu par un getTextExtent ne possède que les attributs width et height, c'est tout
La 4eme, c'est celle que j'utilisais avant et qui donc est loin d'être précise...
Plus qu'a espérer que la 2eme méthode soit bonne...
Marsh Posté le 16-12-2005 à 09:59:13
La 2eme méthode était la bonne. Comme ca fonctionne
Les calculs qui vont bien :
Code :
|
La méthode de défilement :
Code :
|
2 choses quand même :
- il subsiste un léger décalage lors du repositionnement (de l'ordre du pixel). Je suppose que c'est du au fait qu'on déplace le texte par bloc de pixels (ici 3). C'est rectifiable en ajoutant un +1 ou -1 au calcul
- le '1' dans le calcul du repositionnement peut etre amélioré je pense, il y a des cas ou on peut reculer de + de 1 motif, mais je n'y ai pas plus réfléchi que ca...
Marsh Posté le 16-12-2005 à 10:37:48
hop le fou a écrit : |
Hum ! .. t'es en Flash 5 ou inférieur ???
Citation : |
Marsh Posté le 16-12-2005 à 16:24:19
Euh, non, moi j'ai ca :
Citation : Disponibilité |
Et j'ai testé dans le doute que ma doc soit pas bonne (Dictionnaire Actionscript de Macromedia), mais non, l'attribut textFieldHeight n'existe pas (testé avec Flash 7)
Bizarre ces différences de doc?
EDIT : avec la doc en entier c'est encore mieux.
Marsh Posté le 15-12-2005 à 12:46:35
Bonjour,
je cherche a faire en flash un défilement de texte horizontal doux. C'est à dire que quelque soit le texte affiché, il défile continuellement (il sort par la gauche, et revient par la droite)
Illustration : faire défiler le mot "bonjour"
---------------- (champ de texte)
bonjour bonjour
onjour bonjour
njour bonjour
jour bonjour b
our bonjour bo
ur bonjour bon
...
1er problème : trouver le nombre de fois qu'il faut concaténer le texte d'origine pour qu'il fasse au minimum la taille de mon champ de texte + la taille de ma variable a afficher
A priori, c'est faisable étant donné que le champ de texte possède une taille fixe (X) et qu'on peut obtenir la taille en pixel de la variable (Y) (attention, on concatene les espaces à la variable a afficher).
Donc on a X+Y = n*Y, donc on retrouve le nombre de concaténation à faire (n)
2eme problème (et c'est la que j'ai un souci) : réussir à replacer correctement la chaine de caractere lorsque la fin est affichée dans le champs de défilement.
Si je reprend mon exmeple précédent, j'ai obtenu la chaine "bonjour bonjour bonjour" a faire défiler (au moins 2 "bonjour" affichés continuellement et le 3eme pour faire transition).
---------------- (champ de texte)
bonjour bonjour // Début
1 2
jour bonjour //Fin (décalages a cause des espaces)
2 3
...
Il faut donc, lorsque la fin est atteinte, se repositionner sur le début. Le problème est qu'il faut faire correspondre le caractere de fin du motif 3 avec le caractere de début du motif 1 (dans l'exemple cidessus, il faut se repositionner au pixel correspondant au j du motif 1).
Le truc est que je ne trouve pas de formule pour représenter ca.
Si qqun pouvait m'aider (en espérant que mon explication est assez claire)
(si qqun a un autre moyen de faire du défilement doux (sans utiliser la méthode qui consiste à combler un texte de taille inférieur au champ de défilement par des espaces au lieu de dédoubler le texte en question), je suis preneur)
Bizarrement, le calcul est simple pour un texte de taille supérieur au champ de défilement (il faut se repositionner sur le texte à "taille du motif - taille du champ) et pourtant je vois quand meme des décalages...
C'est mon calcul qui est totalement foireux ou c'est la méthode Flash qui donne la taille des variables texte dans un champ en pixel qui est foireuse?
Merci
Message édité par hop le fou le 16-12-2005 à 09:59:48