2010-08-13 1 views
3

Я пытаюсь получить следующий пример, чтобы работать в Flash Builder 4:Время воспроизведения шрифтов в Flash Builder 4

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

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

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

Большое спасибо,

EDIT:

Ive также попытался это ...

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

ответ

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

    } 

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

+0

Большое спасибо за вашу помощь! Это заставило меня задуматься и теперь работать. Я приветствую вас ;-) – codecowboy

+0

Счастлив, что сейчас работает! Мне тоже было немного смутно;) – PatrickS

+0

Вау ... так из чего я могу понять, embedAsCFF по умолчанию прав? Adobe делает Flash sh * t кроватью снова ... * sigh * Спасибо за эту информацию! У меня были крошечные квадраты, а также лол. – bigp

1

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

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

EDIT

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

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

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

я в конце концов будет пытаться повторить пример кода, и будет проверять обратно в ближайшее время с ответом ...

+0

попытался и получил тот же результат. Любая идея, что происходит? – codecowboy

+0

, если текст не отображается в первом SWF, вы уменьшили проблему до проблемы загрузки шрифта. какова ваша среда кодирования, какую IDE вы используете? – PatrickS

+0

Его Flash Builder 4 на Mac (10.6) или ПК (WinXP). Такая же проблема. Я не делал никаких AS в то время, так что может быть что-то глупое. Я создаю новый проект ActionScript в FB4 и компилирую его в Flex SDK. – codecowboy

0

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

+0

Спасибо за ответ. Он нашел шрифт ok – codecowboy

1

У вас проблемы с именованием. Класс называется _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); 
+0

Спасибо. Можете ли вы объяснить, почему необходимо включить «public static var ArialFont: class»? Где я могу ссылаться на ArialFont? Пример от PatrickS работает с классом var 'public static var _Arial: Class; ' – codecowboy

+0

Ну, вы также можете сделать это частным. Дело в том, что метатег «Embed» (как и любой другой метатаг) относится к некоторому объекту, который должен быть указан непосредственно после тега. Со всеми другими встроенными типами имеет смысл иметь его (например, когда вы вставляете изображение), для шрифтов это не так, поскольку шрифт автоматически становится доступным с использованием его имени шрифта или fontFamily. – poke