Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с embedFonts (http://www.flasher.ru/forum/showthread.php?t=143300)

Greved 12.08.2010 21:57

Проблема с embedFonts
 
Я недавно начал изучать этот замечательный язык по книжке Мука, добрался до встраивания шрифтов.
Полностью копирую пример из книги - не отображается текст, хотя само поле отрисовывается (при textfield.border=true).
Вот пример моего кода:
Код AS3:

package { 
        import flash.display.*;
        import flash.text.*;
 
 
        public class HelloWorldVerdana extends Sprite {
 
 
        public function HelloWorldVerdana ( ) {
 
                var pole:TextField=new TextField();
                pole.embedFonts=true;
                pole.text="hello world";
                pole.border=true;
                pole.width=300;
                pole.setTextFormat(new TextFormat("ar_font1",20));
                addChild(pole);
        }
      }
}

Интересно, что когда убираю строчку
Код AS3:

 pole.embedFonts=true;

все работает, и присваивается новый формат текста с встроенным шрифтом ar_font1.
В книге Мука представлены ввиду встраивания [Embed]
Код AS3:

[Embed(source="E:/Windows/Fonts/Verdana.ttf", fontFamily="Verdana")] 
        private var verdana:Class;

Код AS3:

  var t:TextField = new TextField( ); 
                t.embedFonts = true;
 
                t.htmlText = "<FONT FACE='Verdana'>Hello world</FONT>";
                addChild(t);

и через стили CSS.
С ними та же история: с строчкой t.embedFonts = true; - не работает, без нее - работает.
стоит Flash CS5).
Помогите разобраться пожалуйста с проблемой)

vinch 12.08.2010 22:40

Цитата:

с строчкой t.embedFonts = true; - не работает, без нее - работает.
Оно то работает, но только на компьютере, где установлен этот шрифт.
Внедрить шрифты с ЦС5 (в отличии от ЦС4) мне так и не удалось, на форуме ничего не подсказали.
В результате, пользуюсь имбэдом:
Код AS3:

[Embed(source = '../lib/Square_rough.ttf', fontName = 'Square rough', mimeType = 'application/x-font' )]
private const FontClass:Class;
public static var font:String = (new FontClass()).fontName;

У меня работает с embedFonts = true.

Greved 12.08.2010 23:11

у меня вызывает ошибку данный код
Код:

Call to possibly undefined method FontClass
Может конечно это отсутствие опыта, но странно что ты вызываешь метод -конструктор класса FontClass
Код AS3:

public static var font:String = (new FontClass()).fontName;

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

vinch 13.08.2010 00:44

Вложений: 1
Хорошо, без проблем, добавил архив к сообщению. Надеюсь, ты работаешь с FD; если нет, то код в /src/Main.as, файл шрифта в /lib, а бинарник в /bin.
Цитата:

Может конечно это отсутствие опыта, но странно что ты вызываешь метод -конструктор класса FontClass
Код AS3:

public static var font:String = (new FontClass()).fontName;

хотя этого метода не существует).
Чего не существует? Конструктор есть у всех классов. Класс FontClass - это класс шрифта, который наследует класс шрифта Font; он созданный при помощи [Embed(...)].
Переменную font ввел только для удобства, чтобы каждый раз не писать название шрифта.
Наверное, там лучше писать даже:
Код AS3:

public static var font:String = (new FontClass() as Font).fontName;

для удобства.
Упс, я в предыдущем сообщении static упустил (хотя это в данном случае не нужно, я скопировал с кода приложения).

Greved 13.08.2010 10:44

Вложений: 1
Спасибо большое за пример.
Вначале специально запустил все swf - все работает). Затем попытался запустить в Flash CS5, он попросил прописать путь к Flex SDK (см. картинку в вложениях) . Указал путь и до папки с ним, и добавил отдельно flex.swc. После этого ничего не отображается.
Это уведомление было и в моих собственных примерах, но я принял его за должное, т.к. в книге Мука прямо сказано: "Чтобы в приложении Flash CS* работал тег Embed необходимо указать путь к файлу flex.swc".
Затем установил FlashDevelop, открыл ExampleEmbed.as3proj - запускаю - FD попросил указать путь к папке с Flex SDK. После того как прописал путь - все то же самое что и в CS5 - ничего не отображается. И при попытке запустить swf из автономной версии плейера тоже ничего не видно.Flex SDK скачивал с сайта adobe.
Не понимаю в чем может быть проблема. Я так понял проблема уже не в коде...

В FD нашел такую строку при компиляции

Loading configuration file F:\flex_sdk_4.1\frameworks\flex-config.xml

возможно надо что нибудь там поправить?

vinch 13.08.2010 11:52

Тут я не знаю, что сказать.
Я не изменял никаких конфигов, и все работает. Правда, у меня flex sdk 3.5, может в этом дело?

Greved 13.08.2010 14:00

Вложений: 1
скачал flex 3.5a. В FD все к счастью заработало, но при попытке запустить Main.as в Flash CS5 все по прежнему(.
А случай с подгрузкой внешнего swf файла с шрифтами все равно ни там, ни там не работает(во вложении).

i11uminator 28.08.2010 11:41

Та же самая проблема. Писал с Flex SDK 3.1. Все работало. внедренные тегом EMBED шрифты отображались. Скачал Flex SDK 4.1 Шрифты отображатся перестали. Может их теперь как-то по другому внедрять нужно? отпишитесь, если кто выяснил.

D12 29.08.2010 21:06

прошу прощения что не вникал, но была проблема с внедрением шрифта, прокопал пол - рунета нашел кучу не понятной информации которая пригодиться еще, но помогло замена шрифта типа ttf на шрифт типа otf

надеюсь вам поможет

artcraft 29.08.2010 22:59

я тоже не вникал особо в топик, но вшить ттф на этапе компиляции можно по крайней мере двумя способами
1) из ttf файла что лежит в папке assets
Код AS3:

[Embed(source='assets/paola.ttf', fontName="paola", mimeType="application/x-font-truetype", embedAsCFF=false)]
public var  font:Class;

2) скомпилированный в swf при помощи flash IDE (этот способ быстрее т.к. шрифт уже скомпилирован)
Код AS3:

[Embed(source="assets/assets.swf", symbol="LinkageName")]
public var font:Class;


посмотреть список шрифтов которые удалось успешно вшить можно так:
Код AS3:

var fontArray:Array = Font.enumerateFonts(false);
for(var i:int = 0; i < fontArray.length; i++) {
        var thisFont:Font = fontArray[i];
        trace(i+") name: " + thisFont.fontName +"  typeface: " + thisFont.fontStyle);
}

Добавлено через 2 минуты
Цитата:

Сообщение от i11uminator (Сообщение 931939)
Та же самая проблема. Писал с Flex SDK 3.1. Все работало. внедренные тегом EMBED шрифты отображались. Скачал Flex SDK 4.1 Шрифты отображатся перестали. Может их теперь как-то по другому внедрять нужно? отпишитесь, если кто выяснил.

embedAsCFF=false

и всё будет как раньше


Часовой пояс GMT +4, время: 04:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.