Вход

Просмотр полной версии : Проблема с embedFonts


Greved
12.08.2010, 21:57
Я недавно начал изучать этот замечательный язык по книжке Мука, добрался до встраивания шрифтов.
Полностью копирую пример из книги - не отображается текст, хотя само поле отрисовывается (при textfield.border=true).
Вот пример моего кода:
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);
}
}
}
Интересно, что когда убираю строчку
pole.embedFonts=true;
все работает, и присваивается новый формат текста с встроенным шрифтом ar_font1.
В книге Мука представлены ввиду встраивания [Embed]
[Embed(source="E:/Windows/Fonts/Verdana.ttf", fontFamily="Verdana")]
private var verdana:Class;

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) мне так и не удалось, на форуме ничего не подсказали.
В результате, пользуюсь имбэдом:
[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
public static var font:String = (new FontClass()).fontName;
хотя этого метода не существует).
Если у тебя работает, можешь скинуть полностью рабочий пример с текстовым полем и текстом в нем с встроенным шрифтом, пожалуйста?

vinch
13.08.2010, 00:44
Хорошо, без проблем, добавил архив к сообщению. Надеюсь, ты работаешь с FD; если нет, то код в /src/Main.as, файл шрифта в /lib, а бинарник в /bin.
Может конечно это отсутствие опыта, но странно что ты вызываешь метод -конструктор класса FontClass
public static var font:String = (new FontClass()).fontName;
хотя этого метода не существует).
Чего не существует? Конструктор есть у всех классов. Класс FontClass - это класс шрифта, который наследует класс шрифта Font; он созданный при помощи [Embed(...)].
Переменную font ввел только для удобства, чтобы каждый раз не писать название шрифта.
Наверное, там лучше писать даже:
public static var font:String = (new FontClass() as Font).fontName;
для удобства.
Упс, я в предыдущем сообщении static упустил (хотя это в данном случае не нужно, я скопировал с кода приложения).

Greved
13.08.2010, 10:44
Спасибо большое за пример.
Вначале специально запустил все 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
скачал 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
[Embed(source='assets/paola.ttf', fontName="paola", mimeType="application/x-font-truetype", embedAsCFF=false)]
public var font:Class;
2) скомпилированный в swf при помощи flash IDE (этот способ быстрее т.к. шрифт уже скомпилирован)
[Embed(source="assets/assets.swf", symbol="LinkageName")]
public var font:Class;


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

embedAsCFF=false

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

NumpuT
30.08.2010, 13:06
Посмотри как работает CSSStyleDeclaration.