Las clases que conforman Flash Text Engine permiten crear texto, aplicarle formato y controlarlo. Las clases siguientes son los componentes esenciales para crear y mostrar texto con Flash Text Engine:
-
TextElement/GraphicElement/GroupElement: incluyen el contenido de una instancia de TextBlock.
-
ElementFormat: especifica los atributos de formato para el contenido de una instancia de TextBlock.
-
TextBlock - componente fundamental para crear un párrafo de texto.
-
TextLine: una línea de texto creada a partir de TextBlock
Para mostrar el texto, cree un objeto TextElement a partir de una cadena y usando un objeto ElementFormat para especificar las características de formato. Asigne TextElement a la propiedad
content
de un objeto TextBlock. Las líneas de texto que se van a mostrar se crean llamando al método
TextBlock.createTextLine()
. El método
createTextLine()
devuelve un objeto TextLine que contiene parte de la cadena que se ajustará en la anchura especificada. Llame al método varias veces hasta que a toda la cadena se le haya aplicado el formato en líneas. Cuando no haya más líneas que crear, a la propiedad textLineCreationResult del objeto se le asigna el valor:
TextLineCreationResult.COMPLETE
. Para mostrar las líneas, añádalas a la lista de visualización (con los valores de posición
x
e
y
apropiados).
Por ejemplo, el código siguiente utiliza estas clases de FTE para mostrar el texto "Hello World! This is Flash Text Engine!", usando el formato y los valores de fuente predeterminados. En este sencillo ejemplo, únicamente se crea una sola línea de texto.
package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class HelloWorldExample extends Sprite
{
public function HelloWorldExample()
{
var str = "Hello World! This is Flash Text Engine!";
var format:ElementFormat = new ElementFormat();
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
var textLine1:TextLine = textBlock.createTextLine(null, 300);
addChild(textLine1);
textLine1.x = 30;
textLine1.y = 30;
}
}
}
Los parámetros para
createTextLine()
especifican la línea a partir de la que comienza la nueva línea y su anchura en píxeles. La línea a partir de la que comienza la nueva línea suele ser la anterior pero, en caso de que sea la primera línea, es
null
.
Cómo añadir objetos GraphicElement y GroupElement
Para mostrar una imagen o un elemento gráfico, se puede asignar un objeto GraphicElement a un objeto TextBlock. Únicamente se debe crear una instancia de la clase GraphicElement a partir de un gráfico o una imagen y asignar la instancia a la propiedad
TextBlock.content
. Cree la línea de texto llamando a
TextBlock.createTextline()
tal y como lo haría normalmente. El ejemplo siguiente crea dos líneas de texto, una con un objeto GraphicElement y otra con un objeto TextElement.
package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GraphicElementExample extends Sprite
{
public function GraphicElementExample()
{
var str:String = "Beware of Dog!";
var triangle:Shape = new Shape();
triangle.graphics.beginFill(0xFF0000, 1);
triangle.graphics.lineStyle(3);
triangle.graphics.moveTo(30, 0);
triangle.graphics.lineTo(60, 50);
triangle.graphics.lineTo(0, 50);
triangle.graphics.lineTo(30, 0);
triangle.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement:GraphicElement = new GraphicElement(triangle, triangle.width, triangle.height, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = graphicElement;
var textLine1:TextLine = textBlock.createTextLine(null, triangle.width);
textLine1.x = 50;
textLine1.y = 110;
addChild(textLine1);
var textElement:TextElement = new TextElement(str, format);
textBlock.content = textElement;
var textLine2 = textBlock.createTextLine(null, 300);
addChild(textLine2);
textLine2.x = textLine1.x - 30;
textLine2.y = textLine1.y + 15;
}
}
}
Se puede crear un objeto GroupElement para crear un grupo de objetos TextElement, GraphicElement y otros objetos de tipo GroupElement. GroupElement se puede asignar a la propiedad
content
de un objeto TextBlock. El parámetro pasado al constructor
GroupElement()
es un Vector, que apunta a los elementos de texto, gráficos y grupo que conforman el grupo. El ejemplo siguiente agrupa dos elementos gráficos y un elemento de texto y los asigna como una unidad a un bloque de texto.
package
{
import flash.text.engine.*;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
public class GroupElementExample extends Sprite
{
public function GroupElementExample()
{
var str:String = "Beware of Alligators!";
var triangle1:Shape = new Shape();
triangle1.graphics.beginFill(0xFF0000, 1);
triangle1.graphics.lineStyle(3);
triangle1.graphics.moveTo(30, 0);
triangle1.graphics.lineTo(60, 50);
triangle1.graphics.lineTo(0, 50);
triangle1.graphics.lineTo(30, 0);
triangle1.graphics.endFill();
var triangle2:Shape = new Shape();
triangle2.graphics.beginFill(0xFF0000, 1);
triangle2.graphics.lineStyle(3);
triangle2.graphics.moveTo(30, 0);
triangle2.graphics.lineTo(60, 50);
triangle2.graphics.lineTo(0, 50);
triangle2.graphics.lineTo(30, 0);
triangle2.graphics.endFill();
var format:ElementFormat = new ElementFormat();
format.fontSize = 20;
var graphicElement1:GraphicElement = new GraphicElement(triangle1, triangle1.width, triangle1.height, format);
var textElement:TextElement = new TextElement(str, format);
var graphicElement2:GraphicElement = new GraphicElement(triangle2, triangle2.width, triangle2.height, format);
var groupVector:Vector.<ContentElement> = new Vector.<ContentElement>();
groupVector.push(graphicElement1, textElement, graphicElement2);
var groupElement = new GroupElement(groupVector);
var textBlock:TextBlock = new TextBlock();
textBlock.content = groupElement;
var textLine:TextLine = textBlock.createTextLine(null, 800);
addChild(textLine);
textLine.x = 100;
textLine.y = 200;
}
}
}
Reemplazo de texto
Se puede reemplazar texto en una instancia de TextBlock llamando a
TextElement.replaceText()
para reemplazar el texto del elemento TextElement que asignó a la propiedad
TextBlock.content
.
En el ejemplo siguiente se utiliza
repaceText()
para insertar texto al principio de la línea, añadir texto al final de la línea y reemplazar texto en medio de la línea.
package
{
import flash.text.engine.*;
import flash.display.Sprite;
public class ReplaceTextExample extends Sprite
{
public function ReplaceTextExample()
{
var str:String = "Lorem ipsum dolor sit amet";
var fontDescription:FontDescription = new FontDescription("Arial");
var format:ElementFormat = new ElementFormat(fontDescription);
format.fontSize = 14;
var textElement:TextElement = new TextElement(str, format);
var textBlock:TextBlock = new TextBlock();
textBlock.content = textElement;
createLine(textBlock, 10);
textElement.replaceText(0, 0, "A text fragment: ");
createLine(textBlock, 30);
textElement.replaceText(43, 43, "...");
createLine(textBlock, 50);
textElement.replaceText(23, 28, "(ipsum)");
createLine(textBlock, 70);
}
function createLine(textBlock:TextBlock, y:Number):void {
var textLine:TextLine = textBlock.createTextLine(null, 300);
textLine.x = 10;
textLine.y = y;
addChild(textLine);
}
}
}
El método
replaceText()
reemplaza el texto especificado por los parámetros
beginIndex
y
endIndex
con el texto que especifica el parámetro
newText
. Si los valores de los parámetros
beginIndex
y
endIndex
son los mismos,
replaceText()
inserta el texto especificado en esa ubicación. De lo contrario, reemplaza los caracteres especificados mediante
beginIndex
y
endIndex
con el nuevo texto.
|
|
|