Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.06.2009, 21:36
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 1  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
По умолчанию загрузка внешнего шрифта

Здравствуйте, подскажите алгоритм, если таковой есть, каким образом возможно использовать файл шрифта, находящийся в библиотеке внешнего swf, который подгружается в основной на этапе исполнения.
У Мука есть пример такого использования, но файл, содержащий шрифт создается, насколько я понял в Flex Builder, используя тег Embed.
Я попробовал с помощью Flash, но пока что не выходит:
файл swf:
в библиотеке файл шрифта "MyFont", у этого файла прописан Class в поле Class - "MyFont".
поле Base Class пустое
Поставлены галочки в полях :
Export for ActoionScript
Export in frame 1

файл MyFont.as:
Код AS3:
package{
	import flash.text.Font
	public class MyFont extends Font{
 
		public function MyFont(){
			Font.registerFont(MyFont)
		}
	}
}
загрузка файла точно происходит, но текстовое поле остается пустым, если его попытаться форматировать с помощью подгруженного шрифта.

Старый 06.06.2009, 22:16
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 2  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
Не определяте класс для шрифта в загружаемой флешке: флеш это сделает сам, укажите только им класса, например "YouFontClassName". не ригистрируйте шрифт в загружаемой флешке.
регистрируйте шрифт в загружающей флешке:

Код AS3:
 
import flash.display.*;
import flash.events.*;
var myFont:Loader = new Loader();
myFont.contentLoaderInfo.addEventListener(Event.COMPLETE, encounterFont);
myFont.load(new URLRequest("ComSM.swf"));
function encounterFont(ev:Event):void{
    var loaderRef:LoaderInfo = ev.target as LoaderInfo;
    Font.registerFont(loaderRef.applicationDomain.getDefinition("MyFont") as Class);
    trace(Font.enumerateFonts()[0].fontName);// Comic Sans MS
}


Последний раз редактировалось alekslitvinenk; 06.06.2009 в 23:43.
Старый 06.06.2009, 22:43
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 3  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
alekslitvinenk, спасибо, но сорри так не получается ничего, я пока что вот как сделал, я в подгружаемой swf ке назначил документ класс MyFont,
унаследовав его от MovieClip, трейс в основной swf ке видит [object MyFontt]
но я так понял что основная проблема в том, embedFonts, почему то убивает текст и он просто перестает изображаться
MyFont.as:
Код AS3:
package{
	import flash.text.Font
	import flash.display.MovieClip
	public class MyFont extends MovieClip{
 
		public function MyFont(){
			Font.registerFont(MyFontt)//название фонта в библиотеке
		}
	}
}
Код AS3:
trace(Font.enumerateFonts())//[object MyFontt]
ууухх...е-мое, тк даже если я просто в библиотеку кину файл шрифта(например Vernada), расшарю его, то и тогда flash отказывается отображать его, скажите что не так делаю?

Ешкин, кот, меня уже волосы дыбом - добавил еще и Arial чтоб проверить, тк он ток латинницу отображает, народ хелп, неужели cs4 не работает с embed шрифтами?


Последний раз редактировалось AlexDesinger; 06.06.2009 в 22:54.
Старый 06.06.2009, 23:44
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 4  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
исправил код выше

Старый 06.06.2009, 23:48
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 5  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Спасибо, можно походу и так и так, потому что даже во внешней swf ке - там где встроен файл шрифта создавая тестовое текстовое поле - таже беда - шрифт виден, но как только появляется embedFonts=true, все текст не виден ((((((((((((((((

Старый 06.06.2009, 23:50
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 6  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
исправил код выше...
Цитата:
я пока что вот как сделал, я в подгружаемой swf ке назначил документ класс MyFont,
унаследовав его от MovieClip, трейс в основной swf ке видит [object MyFontt]
что вы сделали ? O_o
Изображения
   

Старый 06.06.2009, 23:54
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 7  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Ну я swf- ке назначил документ класс, в котором и зарегистрировал фонты, но дело не в этом, у вас кажется cs3 судя по интерфейсу, а у меня cs4 тк вот он напроч отказывается форматировать шрифт програмно встроенными шрифтами, даже если я форматирую тектовое поле, которое создается в документ классе swf ки, которая и содержит фонт =(

Старый 07.06.2009, 00:05
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 8  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
вы вормат к тексту когда применяете ?
нужно тогда, когда фонт уже загружен, т.е
Код AS3:
function encounterFont(ev:Event):void{
	var loaderRef:LoaderInfo = ev.target as LoaderInfo;
	Font.registerFont(loaderRef.applicationDomain.getDefinition("MyFont") as Class);
	trace(Font.enumerateFonts()[0].fontName);// Comic Sans MS
	mytxt.setTextFormat(new TextFormat("Comic Sans MS"));//Название шрифта должно совпадать не с названием класса, а с названием шрифта
}
P.S насколько я помню срузу после загрузки swf-ки не получалось применить форматирование, попробуте поставить 100-200 милисекунд задержки...

Старый 07.06.2009, 00:12
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 9  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
дк, говорю же, дело в том что форматирование не получается даже если я буду не подгружать фонт, а просто его изначально в библиотеку встрою, в главную swf-ку, даже тогда embedFont убивает текст...
может импорт из библиотеки надо делать? Или экземпляр создавать?

Добавлено через 14 часов 52 минуты
Мдааа уж - супер, действительно видимо баг, единственный способ, которым получилось встроить внешний шрифт такой-
создаю внешний swf с текстфилдом на таймлайне, который лежит за пределами сцены, в нем обязательно должен быть текст, этот текст я отформатировал вручную, и embedom внедрил шрифт в этот текстфилд ( Внимание - все вручную!!!)
и все больше ничего не нужно - ни внедрение шрифтов в библиотеку, ни прописание классов, ни регистрация шрифтов кодом.
Затем в основном swf загружаю этот файл с текстфилдом, получаю ссылку на фонт текстфилда, сохраняю в public static переменной, и можно ей пользоваться везде - таким только образом получается внедрение шрифта.

вот синтаксис подгрузки, кому нужно:
Код AS3:
		var l:Loader=new Loader();
			l.contentLoaderInfo.addEventListener(Event.INIT, initL);
			l.load(new URLRequest("fonts.swf"));
			function initL(e:Event):void {
				l.contentLoaderInfo.removeEventListener(Event.INIT, initL)
				addChild(l)
				var ff:Object=l.content
				var tt:TextFormat=new TextFormat()
				tt=ff.MyTextField.getTextFormat()//TextField добавленный и отформатированный вручную во внешнем swf
				myFont=tt.font
			}


Последний раз редактировалось AlexDesinger; 07.06.2009 в 15:06.
Старый 11.06.2009, 12:51
2Borik вне форума Посмотреть профиль Отправить личное сообщение для 2Borik Найти все сообщения от 2Borik
  № 10  
Ответить с цитированием
2Borik
 
Аватар для 2Borik

Регистрация: Jan 2006
Сообщений: 51
а кто нибудь может подсказать, как удалить динамически загруженный внешний шрифт из библиотеки?

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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