Efecto "dimo" en Flash
2 seguidores
Estoy intentando hacer que, en un campo de texto dinámico en flash, se cree un fondo blanco con el tamaño justo de cada línea.
Como creo que me he explicado fatal pongo una foto:
http://www.clientes.almostdesign.com/dropbox/dimo.jpg
¿Sabéis cómo podría conseguir eso? ¿Tengo que separar cada línea del texto en un textfield distinto?
almostdesign
Es lo primero que he hecho en el "pulido" :)
Lo segundo ha sido meterlo en una función, para poder usarlo en varios sitios.
Muchas gracias, Cai!
ventdaval
Un truquillo para mejorar la legibilidad (y escribir menos) ;)
<code>var cad:Array = cadena.split(" ");
var word:Number = 0;
var line:Number = 0;
//
while (word<cad.length) {
var tb=texto.attachMovie("tb","tb"+line,line);
tb._y = line*12;
while (tb.textBox.textWidth<tb.textBox._width) {
backup = tb.textBox.text;
tb.textBox.text += cad[word]+" ";
word++;
}
tb.textBox.text = backup;
tb.dimo._width = tb.textBox.textWidth;
line++;
word--;
}</code>
almostdesign
Conseguido!
"tb" es un mc en la biblioteca, que contiene una caja de texto (textBox) y un fondo blanco (dimo).
<code>
var cad:Array = cadena.split(" ");
var word:Number = 0;
var line:Number = 0;
//
while (word<cad.length) {
texto.attachMovie("tb","tb"+line,line);
texto["tb"+line]._y = line*12;
while (texto["tb"+line].textBox.textWidth<texto["tb"+line].textBox._width) {
backup = texto["tb"+line].textBox.text;
texto["tb"+line].textBox.text += cad[word]+" ";
word++;
}
texto["tb"+line].textBox.text = backup;
texto["tb"+line].dimo._width = texto["tb"+line].textBox.textWidth;
line++;
word--;
}
</code>
Ahora voy a ver si lo pulo un poquillo...
almostdesign
Vaya follón!
Voy a intentar crear una función con tus pasos, y te digo si me fue bien.
Muchas gracias!
ventdaval
puess... no es muy sencillo...
1.- Separas el texto en parrafos (por los saltos de lineas).
2.- por cada parrafo separas el texto en palabras,
3.- creas un textfield con multiline=false y autoSize="left",
4.- vas metiendo palabras hasta que el ancho del textfield supere el ancho maximo.
5.- quitas la ultima palabra (opcional, mas exacto).
6.- repites desde el paso 3.
Todo esto se complica bastante mas si quieres htmlText :(
almostdesign
¿Y cómo detectas qué palabras ya no caben en el textfield, para crear otro y seguir escribiendo ahí?
ventdaval
posi... en as2 creo que lo unico es hacer un textfield por linea :(
almostdesign
El getLineMetrics es solo para AS3, ¿no?
Estoy con AS2 :(
ventdaval
mmm, o eso o con AS3 puedes usar getLineMetrics para coger el ancho y alto de cada linea en el TextField, y con eso creas un rectángulo atras... algo asi:
<code>var l:uint=tf.numLines;
for(var i:uint=0;i<l;i+ +) {
var metrics:TextLineMetrics=tf.getLineMetrics(i);
graphics.beginFill(0x0000FF);
graphics.drawRect(tf.x+metrics.x,
tf.y+tf.getCharBoundaries(tf.getLineOffset(i)).y,
metrics.width,
metrics.height);
}</code>