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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
Arrow Не могу зарегистрировать шрифт

Пытаюсь сделать динамическую подгрузку шрифтов в приложение. Создаю флешку в которой создаю новый шрифт, делаю ему Linkage.
Затем в основном классе делаю загрузку этой свф"ки. Всё вроде бы ок, он спотыкаюсь при регистрации шрифта! В чём я допустил ошибку?

Код AS3:
package 
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.text.Font;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.describeType;
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.AntiAliasType;
	/**
	 * ...
	 * @author Andrey
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
 
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			loadFont("../lib/fontTest.swf");
		}
 
		  private function loadFont(url:String):void 
		  {
               var loader:Loader = new Loader();
               loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded);
               loader.load(new URLRequest(url));
			   trace("LOADING...");
          }
 
          private function fontLoaded(e:Event):void 
		  {
				trace(e.target.applicationDomain.getDefinition("Alba"));
			    var FontLibrary:Class = e.target.applicationDomain.getDefinition("Alba") as Class;
				Font.registerFont(FontLibrary.Alba);    //Вот тут вылазит ошибка [Fault] exception, information=TypeError: Error #2007: Параметр font не должен быть равен нулю.
			   drawText();
          }
 
          public function drawText():void 
		  {
               var tf:TextField = new TextField();
               tf.defaultTextFormat = newTextFormat;
               tf.embedFonts = true;
               tf.antiAliasType = AntiAliasType.ADVANCED;
               tf.autoSize = TextFieldAutoSize.LEFT;
               tf.border = true;
			   tf.textColor = 0x000000;
               tf.text = "Scott was here\nScott was here too\nblah scott...:;*&^% ";
 
 
               addChild(tf);
          }
	}
 
}

Старый 14.10.2011, 14:28
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 2  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Код AS3:
package stlib.fon
{
	import flash.text.Font;
 
	public class RegistrationFonts extends Font
	{
 
		[Embed(source = 'sours/ARIAL.TTF',
			fontFamily = 'arial',
			embedAsCFF = 'false')]
			private var Arial1:Class;
 
		[Embed(source = 'sours/ARIALBD.TTF',
			fontFamily = 'arialbd',
			embedAsCFF = 'false')]
			private var Arial2:Class;
 
		[Embed(source = 'sours/ARIALBI.TTF',
			fontFamily = 'arialbi',
			embedAsCFF = 'false')]
			private var Arial3:Class;
 
		[Embed(source = 'sours/ARIALI.TTF',
			fontFamily = 'ariali',
			embedAsCFF = 'false')]
			private var Arial4:Class;
 
		[Embed(source = 'sours/ARIBLK.TTF',
			fontFamily = 'ariblk',
			embedAsCFF = 'false')]
			private var Arial5:Class;
 
		[Embed(source = 'sours/WEBDINGS.TTF',
			fontFamily = 'webdings',
			embedAsCFF = 'false')]
			private var Sumbol1:Class;
 
		[Embed(source = 'sours/WINGDING.TTF',
			fontFamily = 'wingding',
			embedAsCFF = 'false')]
			private var Sumbol2:Class;
 
		public function RegistrationFonts()
		{
			registerFont(Arial1);
			registerFont(Arial2);
			registerFont(Arial3);
			registerFont(Arial4);
			registerFont(Arial5);
			registerFont(Sumbol1);
			registerFont(Sumbol2);
		}
 
		// get all font name
		static public function get ALLFONTNAME ():String
		{
			var _ALLFONTNAME	:String	= '';
 
			var _arr		:Array	= Font.enumerateFonts();
				_arr.sortOn ( "fontName", Array.CASEINSENSITIVE );
 
			for (var i:int = 0; i < _arr.length; i++)
				if (i != _arr.length - 1) _ALLFONTNAME += _arr[i].fontName + "\n";
				else _ALLFONTNAME += _arr[i].fontName;
 
			return _ALLFONTNAME;
		}
	}
}
Код AS3:
	public class Main extends Sprite 
	{
		RegistrationFonts;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
 
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			// startup
		}
	}
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 14.10.2011, 14:34
trng вне форума Посмотреть профиль Отправить личное сообщение для trng Найти все сообщения от trng
  № 3  
Ответить с цитированием
trng

Регистрация: Jun 2011
Сообщений: 212
Из хелпа к Font:
Класс Font нельзя использовать для загрузки внешних шрифтов или для создания своего экземпляра Font. Класс Font следует использовать как абстрактный базовый класс.
Из хелпа к FontAsset:
FontAsset – это подкласс класса flash.text.Font, который представляет шрифты, встраиваемые в приложение Flex.
Встраиваемый шрифт может быть шрифтом TrueType (TTF) или OpenType (OTF).

Старый 14.10.2011, 16:00
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 4  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
немного не понял ваш пример. Получается если я сделаю как у вас и у меня будет допустим 100 шрифтов, то юзеру придётся сидеть и ждать пока все 100 шрифтов загрузятся? Может тогда разбить всё на маленькие swf, в каждом из которых будет по шрифту и их подгружать, а уже после подгрузки регистрировать?

Старый 14.10.2011, 16:04
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
Font.registerFont(FontLibrary);
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 14.10.2011, 16:15
stweet вне форума Посмотреть профиль Отправить личное сообщение для stweet Найти все сообщения от stweet
  № 6  
Ответить с цитированием
stweet
 
Аватар для stweet

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
где то у Мука читал как можно грузить шрифты по мере их надобности.

Добавлено через 1 минуту
Код AS3:
Получается если я сделаю как у вас и у меня будет допустим 100 шрифтов, то юзеру придётся сидеть и ждать пока все 100 шрифтов загрузятся?
в моём примере они вкомпилины в проект.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

Старый 15.10.2011, 13:00
Universe вне форума Посмотреть профиль Отправить личное сообщение для Universe Найти все сообщения от Universe
  № 7  
Ответить с цитированием
Universe
 
Аватар для Universe

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
To GBee: не, так тоже не прокатывает - выдаёт ошибку
[Fault] exception, information=ArgumentError: Error #1508: Указано недопустимое значение для аргумента font.

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Кто то из ребят писал: делают swc-ку со шрифтами (при чем уже с набором нужных глифов), потом в проекте нужный подключают - никаких головных болей (и лишнего веса). Я это редко юзаю ибо с ИДЕ работаю, мне проще через иде - лентяй

Старый 15.10.2011, 14:24
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 9  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Кто то из ребят писал: делают swc-ку со шрифтами
Так в IDE и делают.

Так к слову, после подключения swc

Код AS3:
public class EventsController extends EventDispatcher implements IEventDispatcher
	{
		private static var _ed:EventDispatcher;
 
		private var _myriad:Font	 				= new Myriad_font as Font;
		private var _arial_bold:Font 				= new Arial_bold as Font;
__________________
Марк Tween

Старый 15.10.2011, 14:30
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Шрифты можно использовать без регистрации. Они будут доступны в том ApplicationDomain, куда загружены. Во флекс вовсе не используется механизм Font.registerFont(), потому что после этого невозможно выгрузить swf, содержащий этот шрифт. Вместо этого ввели понятие FontContext, который поддерживают все модули, созданные во флекс. Специальный билдер в модуле выдает UITextField или какой другой компонент, содержащий текст из своего контекста (ApplicationDomain). После этого в компоненте можно использовать embed fonts.

Статья.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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