I am trying to get the following example to work in Flash Builder 4:
http://developer.yahoo.com/flash/articles/runtime-fonts-as3.html
The Actionscript project compiles but all I get on screen is a tiny rotated square with no text in it.
Does anyone know why this might be happening? My code is identical to the example above - I have compiled the first class into _Arial.swf.
Edit
I've also tried this:
package {
import flash.display.Sprite;
import flash.display.Loader;
开发者_开发百科 import flash.events.Event;
import flash.net.URLRequest;
import flash.text.*;
public class _Arial extends Sprite {
[Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', fontFamily='myFont', mimeType='application/x-font')]
public static var _Arial:Class;
public function _Arial():void {
drawText();
}
public function drawText():void {
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("_Arial",60,0);
tf.embedFonts = true;
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.border = true;
tf.text = "Scott was here\nScott was here too\nblah scott...:;*&^% ";
tf.rotation = 15;
addChild(tf);
trace(Font.enumerateFonts());
}
}
}
var fontList:Array = Font.enumerateFonts(false);
for (var i:uint=0; i<fontList.length; i++) {
trace("font: "+fontList[i].fontName);
}
The trace displays: font: _Arial
Ok, I got it to work... I started with this
public class _Arial extends Sprite
{
[Embed(source='fonts/Arial.ttf', fontName='_Arial',
mimeType="application/x-font-truetype",
unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E',
embedAsCFF= "false")]
public static var _Arial:Class;
}
and to test it , I added that
public function _Arial():void
{
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat ( "_Arial" , 24 , 0 );
tf.autoSize = TextFieldAutoSize.LEFT;
tf.embedFonts = true;
tf.text = "This is some text to test!";
tf.rotation = 20;
addChild(tf);
}
The text did display , so I got rid of the constructor and tried the code example again, and it worked!!!
You have naming problems. The class is called _Arial
, but you give the font you embed the same class name. That's causing problems to begin with.
Second, to use embedded fonts, you just use them like this:
// embed the font
[Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', mimeType='application/x-font')]
public static var ArialFont:Class;
// use the font
var someTextFormat:TextFormat = new TextFormat( '_Arial', 12 );
Although your font SWF compiles, you still could check that the font is correctly embedded by simply adding a textfield in that class , using that font, making sure that embedFonts is set to true, rotate the Textfield if you wish and make sure that the text displays. If it doesn't work at that level, no need to go any further...
After that stage , the code is pretty straightforward and I can't see where it could go wrong
EDIT
As mentioned in my comment I wasn't able to replicate the code example , I get the same result as you.
The only way I could get it to work was by embedding the font directly , which is something I often do.
[Embed(source='fonts/Arial.ttf', fontName='_Arial',
mimeType="application/x-font-truetype",
unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B- U+0060,U+0061-U+007A,U+007B-U+007E',
embedAsCFF= "false")]
public class Main extends Sprite
{
public function Main():void
{
drawText();
}
}
I will eventually try to replicate the example code and will check back soon with an answer...
For your embed statement in your code above, I wonder if the compiler is trying to look for the font relative to your source path, rather than the root of your file system. I would try copying the font file into an assets folder under the src folder of your project. Then refer to it in the embed statement as "/assets/ARIAL.TTF". Hope that helps.
精彩评论