-
Basic Font Embedding
I'm trying to understand why my embeded fonts wont work in AS3. I have extensive experience with this in AS2 but something has changed that's just not working.
I'm using the CS3 authoring tool to compile an .fla.
I included a font symbol in the library, set the linkage name to Fruitiger, checked export for AS and first frame and included the base class flash.text.Font.
Then in the class that needs it I imported flash.text.Font, flash.text.TextFormat, and flash.text.TextField.
The class is similar to this:
PHP Code:
package{
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.Font;
public class Demo extends Sprite{
var txtFormat:TextFormat;
public function Demo(){
txtFormat = new TextFormat();
txtFormat.font = "Fruitiger"
var tf:TextField = new TextField();
tf.background = true;
tf.backgroundColor = 0xFF0000;
tf.embedFonts = true;
tf.text = "Test Text";
tf.setTextFormat(txtFormat);
addChild(tf);
}
}
}
I get a red square on the stage but no text and no errors.
Any ideas on what I'm doing wrong?
-
Hmm, seems to be a bit of a bug in CS3.
I appears that no matter what name you use as the export class name in the linkage, the string assigned to the TextFormat.font property must be the entire name listed in your loaded fonts list.
For example, when you create a new font symbol in the library, if the font chosen in the Font dropdown list is Fruitiger LT Std 55 Roman, then your text format object must look like this:
myTextFormat = new TextFormat();
myTextFormat.font = "Fruitiger LT Std 55 Roman";
I realize this is probably not a widely encountered issue as the preferred method of embedding fonts is likely using the [Embed] directive in a font class.
-
No bug. You need to give your font a clas name. Every object is a class. Then you write:
var fnt:Font= new Fruitiger();
var txtFormat:TextFormat = new TextFormat();
txtFormat.font = fnt.fontName;
var tf:TextField = new TextField();
tf.text = "Test Text";
tf.embedFonts = true;
tf.setTextFormat (txtFormat);
addChild (tf);
-
Thanks for that Cancer. For some reason the verbose name also works without the object creation or calls to registerFont()