|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Внедрение Шрифта. Runtime Loading.
Лебенсборн чыхыртма, православные.
Вот еще один базовый нуб-вопрос. Читаю Мука. Пробую реализовать пример из главы Loading Fonts at Runtime. Подход, насколько я понял, там следующий: 1. Создать вспомогательный файл с именем Fonts.fla, докУмент класс которого выглядит, например, так: package { import flash.display.*; import flash.text.*; public class Fonts extends Sprite { [Embed(source="c:/windows/fonts/verdana.ttf", fontFamily="Verdana")] private var verdana:Class; [Embed(source="c:/windows/fonts/verdanab.ttf", fontFamily="Verdana", fontWeight="bold")] private var verdanaBold:Class; // Constructor public function Fonts() { // Register this class's embedded fonts in the global font list Font.registerFont(verdana); Font.registerFont(verdanaBold); } } } package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.net.*; public class RuntimeFont extends Sprite { public function RuntimeFont() { // Load the .swf file that contains the embedded fonts var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.INIT, initListener); loader.load(new URLRequest("Fonts.swf")); } private function initListener (e:Event):void { // The font has loaded, so now display the formatted text outputMsg(); } private function outputMsg():void { // Create the text field var t:TextField = new TextField(); t.embedFonts = true; t.text = "And the First Ones shall awaken on that day" + "\nWhen man will return to the stars!"; addChild(t); } } } Потом войти в Linkage Properties и поставить галочку Export for Action Script. В результате появится неприятное предупреждение "A definition for this class could not be found in the classpath... ", но мы его тупо за-ОК-йиваем. Ну вот и всё, походу дела. Запускаю RuntimeFont и получаю вот такую ошибку: TypeError: Error #2007: Parameter font must be non-null. at flash.text::Font$/registerFont() at Fonts$iinit() Где прокол? В чем ошибка? P.S. Если запустить отдельно Fonts.fla - то выдается та же ошибка, вероятно трабл в этом файле. Однако там я ничего не менял (кроме более наглядного расположения кода), он взят прямо из книги. Примечание: На всякий случай сообщу, что у меня Adobe Flash CS3 Professional (version 9.0). Впрочем, примеры из книги должны быть универсальны для всех версий, наверное. Последний раз редактировалось iNils; 25.07.2013 в 15:43. |
|
|||||
1. тем посвященных ембеду шрифтом на форуме навалом, воспользуйтесь поиском.
2. Цитата:
3. Ошибка у вас валится потому что в загружаемой флешке переменные verdana и verdanaBold приходят null. Почему это интересный вопрос, в первую очередь я бы проверил пути к шрифтам. |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Painkiller,
1. Я поиск юзал немного, но навскидку нужное не нашел. Посмотрю еще конешно... 2. У Мука такой алгоритм. Правда повествование сумбурное какое-то (почему-то именно в этой главе), иногда и не понять, что он советует для Flash IDE а что для Flex, например. Может я чего не разобрал. 3. С путями всё ОК, Windows XP SP3, c:\windows\fonts\verdana.ttf - такой путь и такой файл существуют. Может дело не с путями а с fontFamily? Странный параметер. Вот если например у меня вообще есть левый шрифт, типа Chiller, то как определить его fontFamily, не понятно. |
|
|||||
__________________
interplanety |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Korchy, Спасибо, изучаю...
Но если навскидку оценить, то это весьма неслабо, с точки зрения уровня нуба, конешно. Кто бы мог подумать что нужно столько сторонних извратов, типа super() для EventDispatcher... Хочу пока спросить по поводу другого вашего поста с именем "Встраивание шрифта в Adobe Flash CS". Получилось вот так: 1. Создал такой объект в библиотеке: 2. Написал такой код в докУмент классе проекта: package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.net.*; public class RuntimeFont extends Sprite { public function RuntimeFont() { var Text1:TextField = new TextField(); Text1.embedFonts = true; Text1.width = 500; Text1.height = 350; Text1.x = 25; Text1.y = 25; var TFormat1:TextFormat = new TextFormat(); TFormat1.font = "Chiller"+"_"+"30"+"pt_st"; Text1.text = "Testing embedding technique..."; Text1.setTextFormat(TFormat1); addChild(Text1); } } } Но есть два момента: 1. Размер шрифта какой-то очень маленький... Я специально менял значение 30 на 200 (и в строке кода, и в имени объекта), но как ни странно размер остается точно таким же. Глюк? Или что-то не так... 2. Пробовал вместо BitmapText шрифта создать обычный, галку не ставить. Указал шрифт CyrilicHover и имя вписал: CyrilicHover_name, (размер = 100). В коде прописал его сначала так: , но это нихрена не дало, пустой экран. Тогда вписал , и текст появился, но опять же маленький, явно не 100. Опять что-то странное... Вдруг сейчас на самом деле подхватился системный шрифт, кто его знает, ведь имена то совпадают. Последний раз редактировалось iNils; 25.07.2013 в 15:43. |
|
|||||
2 Fogflasher
А у используемых вами шрифтов есть вообще поддержка такого большого размера? Я с большими размерами не экспериментировал, мне хватало 10-12, максимум 14 размеров.
__________________
interplanety |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Korchy,
Я не знаю, а как определить эту поддержку? Я думал что у ttf шрифтов размер какбэ любой может быть. Попробовал немного другой подход: package { import flash.display.*; import flash.text.*; import flash.events.*; public class FontEmbed extends Sprite { //--- Constructor ---// public function FontEmbed() { var TFormat1:TextFormat = new TextFormat(); TFormat1.font = new Chiller_embed().fontName; //Manually created class name in Library var txtField:TextField = new TextField(); txtField.defaultTextFormat = TFormat1; txtField.embedFonts = true; txtField.text = "\nAnd Humanity shall one day Rediscover..."; addChild(txtField); } } } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
2 Fogflasher
Попробуйте сначала сделать точно по тому, как я написал в посте по ссылке (это где "встроить шрифты стандартным образом"). Вот пример с вашим шрифтом Chiller размера 30 встроенном в проект. Заодно приложил файлы проекта (сделано на коленке в CS4).
__________________
interplanety |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Wolsh, спасибо прочитал.
Пробовал ваш пример (что на второй странице) реализовать в IDE, но не получилось. Видимо Korchy прав, и тэги эмбэдд вообще не воспринимаются Флэшем ИДЭ. Пример от Dimarik слишком абстрактен, нехватает пэкиджей и конструкторов. То что вы в архиве приаттачили очевидно сделано не во флэш... Я подозреваю что вы работаете на Flex или еще чем-то таком, что мне незнкомо. Добавлено через 5 минут Korchy, благодарю за пример. Всё работает. Хотя, в принципе я так всё и делал. Просто я принципиально не указывал строку TFormat.size = 30; Мне казалось, что формат имени Chiller_30pt_st вместе с указанием 30 в форме ввода должно автоматически давать шрифт этого размера. А выходит что нихрена: все три 30-ки должны работать в связке. |
Часовой пояс GMT +4, время: 23:22. |
|
« Предыдущая тема | Следующая тема » |
Теги |
font embedding , runtime , внедрение шрифтов , шрифт |
Опции темы | |
Опции просмотра | |
|
|