Шрифты времени выполнения в Flash Builder 4

Я пытаюсь заставить следующий пример работать в Flash Builder 4:

http://developer.yahoo.com/flash/articles/runtime-fonts-as3.html

Проект Actionscript компилируется, но все, что я вижу на экране, — это крошечный повернутый квадрат без текста.

Кто-нибудь знает, почему это может происходить? Мой код идентичен приведенному выше примеру — я скомпилировал первый класс в _Arial.swf.

Редактировать

Я также пробовал это:

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);
}

В трассировке отображаются: шрифт: _Arial


person codecowboy    schedule 13.08.2010    source источник


Ответы (4)


Хорошо, я начал работать... Я начал с этого

   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; 

}

и чтобы проверить это, я добавил, что

  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);

  }

Текст действительно отображался, поэтому я избавился от конструктора и снова попробовал пример кода, и он сработал!!!

person PatrickS    schedule 14.08.2010
comment
Большое спасибо за вашу помощь! Это сводило меня с ума, и теперь это работает. Я приветствую вас ;-) - person codecowboy; 14.08.2010
comment
Вау... насколько я понимаю, embedAsCFF по умолчанию имеет значение true? Adobe опять заставила Flashнасрать на постель... *вздох Большое вам спасибо за эту информацию! У меня тоже были маленькие квадратики, лол. - person bigp; 03.12.2010

У вас проблемы с именами. Класс называется _Arial, но вы даете встроенному шрифту то же имя класса. Это вызывает проблемы с самого начала.

Во-вторых, чтобы использовать встроенные шрифты, вы просто используете их так:

// 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 );
person poke    schedule 13.08.2010
comment
Спасибо. Можете ли вы объяснить, почему необходимо включать «public static var ArialFont: class»? Где я могу сослаться на «ArialFont»? Пример от PatrickS работает с классом var 'public static var _Arial:Class; ' - person codecowboy; 14.08.2010
comment
Ну, вы также можете сделать это приватным. Дело в том, что метатег Embed (как и любой другой метатег) относится к какому-то объекту, который должен быть указан сразу после тега. Для всех других встроенных типов имеет смысл иметь его (например, когда вы встраиваете изображение), для шрифтов это не так, поскольку шрифт автоматически становится доступным с помощью его fontName или fontFamily. - person poke; 14.08.2010

Хотя ваш SWF-шрифт компилируется, вы все равно можете проверить правильность внедрения шрифта, просто добавив текстовое поле в этот класс, используя этот шрифт, убедившись, что для embedFonts установлено значение true, поверните текстовое поле, если хотите, и убедитесь, что текст дисплеи. Если это не работает на этом уровне, не нужно идти дальше...

После этого этапа код довольно прост, и я не вижу, где он может пойти не так.

РЕДАКТИРОВАТЬ

Как упоминалось в моем комментарии, мне не удалось воспроизвести пример кода, я получаю тот же результат, что и вы.

Единственный способ заставить его работать — напрямую встроить шрифт, что я часто и делаю.

[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();
        }
    }

В конце концов я попытаюсь воспроизвести код примера и скоро вернусь с ответом...

person PatrickS    schedule 13.08.2010
comment
попробовал и получил тот же результат. Есть идеи, что происходит? - person codecowboy; 13.08.2010
comment
если текст не отображается в первом SWF, значит, вы сузили проблему до проблемы с загрузкой шрифта. какая у вас среда кодирования, какую IDE вы используете? - person PatrickS; 13.08.2010
comment
Это Flash Builder 4 на Mac (10.6) или ПК (WinXP). Та же проблема на обоих. Я давно не делал AS, так что, возможно, делаю что-то глупое. Я создаю новый проект actionscript в FB4 и компилирую его с помощью Flex SDK. - person codecowboy; 13.08.2010
comment
С вашей стороны все в порядке, я пробовал, и этот пример просто не работает. Как предполагает Poke, это, вероятно, проблема с соглашением об именах. - person PatrickS; 14.08.2010

Что касается вашего заявления о встраивании в ваш код выше, мне интересно, пытается ли компилятор искать шрифт относительно вашего исходного пути, а не корня вашей файловой системы. Я бы попробовал скопировать файл шрифта в папку с ресурсами в папке src вашего проекта. Затем укажите его в заявлении о встраивании как «/assets/ARIAL.TTF». Надеюсь, это поможет.

person Wade Mueller    schedule 13.08.2010
comment
Спасибо за ответ. Он нашел шрифт в порядке - person codecowboy; 14.08.2010