AS3 Embeber tipografías con negrita en tiempo de compilación

·

AS3 es el acrónimo de ActionScript 3 el nuevo lenguaje de programación Flash/Flex, con una redefinición completa del lenguaje, orientación a objeto y sobre todo con la separación de sdk del ide flash y mayor aproximación al estándar ECMAScript (ECMA 262)

Lo que vamos a hacer es decirle al compilador flex que incluya ("embed") las fuentes dentro de un compilado swf, podemos utilizar las fuentes desde ese mismo swf o hacer una carga dinámica de las mismas desde otro aplicativo, aunque como diría Conan el cimmerio esa es otra historia.

Este proceso lo realiza el compilador flex así que no lo intentes desde el IDE de flash.

Para poder utilizar negrita con fuentes embebidas tenemos que registrar tanto la fuente con los caracteres normales como la fuente con los caracteres en negrita.

En el caso de la negrita tenemos que indicar el fontWeight= "bold", si lo indicamos en cuanto cargamos un juego de caracteres que no tiene negrita, al compilar obtendremos un error:

"Error: exception during transcoding: Font for alias 'XXXX' with bold weight was not found at: file"

Las fuentes tienen que ser TrueType y la ruta al fichero .ttf absoluta o relativa al directorio donde esta el fuente (el .as).

En ambas etiquetas Embed pondremos el mismo FontName, si no embebemos la fuente en modo negrita no tendremos ningún error simplemente se ignorará nuestra etiqueta o nuestra indicación de formato negrita.


package Demos {

import flash.display.Sprite;
import flash.text.AntiAliasType;
import flash.text.*;


public class EmbedFontDemo extends Sprite {

[Embed( source = "./assets/FUTURA.TTF"
, fontWeight = "normal", fontName = "Futura"
, mimeType = "application/x-font-truetype"
)
]
public static const Futura:Class;

[Embed( source = "./assets/FUTURAB.TTF"
, fontWeight = "bold", fontName = "Futura"
, mimeType = "application/x-font-truetype"
)
]
public static const FuturaB:Class;

public function EmbedFontDemo():void {
var Lorem:String = "Lorem ipsum dolor sit <b>amet</b>, consectetur adipisci elit...";
var _Texto:TextField = new TextField();
_Texto.embedFonts = true;
_Texto.antiAliasType = AntiAliasType.ADVANCED;
_Texto.autoSize = TextFieldAutoSize.LEFT;

this.addChild(_Texto);
_Texto.htmlText = Lorem;
Font.registerFont(Futura);
Font.registerFont(FuturaB);

var FormatFutura:TextFormat = new TextFormat();
FormatFutura.font = "Futura";

_Texto.setTextFormat(FormatFutura);

}
}
}



Puedes ver como queda el ejemplo aquí

Probado en:

FlashDevelop 3.0.0 Beta9 for Microsoft .NET 2.0 Runtime con sdk flex_sdk_3.0.3.2490_mpl