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

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

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

Регистрация: Mar 2013
Сообщений: 290
Post Внедрение Шрифта. Runtime Loading.

Лебенсборн чыхыртма, православные.

Вот еще один базовый нуб-вопрос.

Читаю Мука. Пробую реализовать пример из главы Loading Fonts at Runtime.
Подход, насколько я понял, там следующий:

1. Создать вспомогательный файл с именем Fonts.fla, докУмент класс которого выглядит, например, так:
Код AS3:
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);
    }
 
 
  }
}
2.Создать основной файл, например RuntimeFont.fla, докУмент класс которого выглядит примерно так:
Код AS3:
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);
			}
 
	  }
}
3. В библиотеке этого основного файла создать New Font, указать любое имя, выбрать в списке, для данного случая шрифт Verdana.
Потом войти в 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.
Старый 04.07.2013, 13:42
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 2  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
1. тем посвященных ембеду шрифтом на форуме навалом, воспользуйтесь поиском.
2.
Цитата:
В библиотеке этого основного файла создать New Font, указать любое имя, выбрать в списке, для данного случая шрифт Verdana.
Потом войти в Linkage Properties и поставить галочку Export for Action Script.
Это зачем? вы же грузите шрифт, зачем его ембедить в основной флешке.
3. Ошибка у вас валится потому что в загружаемой флешке переменные verdana и verdanaBold приходят null. Почему это интересный вопрос, в первую очередь я бы проверил пути к шрифтам.

Старый 04.07.2013, 13:59
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 3  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Painkiller,

1. Я поиск юзал немного, но навскидку нужное не нашел. Посмотрю еще конешно...

2. У Мука такой алгоритм. Правда повествование сумбурное какое-то (почему-то именно в этой главе), иногда и не понять, что он советует для Flash IDE а что для Flex, например. Может я чего не разобрал.

3. С путями всё ОК, Windows XP SP3, c:\windows\fonts\verdana.ttf - такой путь и такой файл существуют.
Может дело не с путями а с fontFamily? Странный параметер. Вот если например у меня вообще есть левый шрифт, типа Chiller, то как определить его fontFamily, не понятно.

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 Fogflasher

см. п. 8

http://korchy.livejournal.com/85656.html
__________________
interplanety

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

Регистрация: Mar 2013
Сообщений: 290
Korchy, Спасибо, изучаю...

Но если навскидку оценить, то это весьма неслабо, с точки зрения уровня нуба, конешно.
Кто бы мог подумать что нужно столько сторонних извратов, типа super() для EventDispatcher...

Хочу пока спросить по поводу другого вашего поста с именем "Встраивание шрифта в Adobe Flash CS".

Получилось вот так:

1. Создал такой объект в библиотеке:
Название: snap4841.jpg
Просмотров: 572

Размер: 47.6 Кб

2. Написал такой код в докУмент классе проекта:

Код AS3:
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).
В коде прописал его сначала так:
Код AS3:
TFormat1.font = "CyrillicHover_name";
, но это нихрена не дало, пустой экран.

Тогда вписал
Код AS3:
TFormat1.font = "CyrillicHover";
, и текст появился, но опять же маленький, явно не 100.
Опять что-то странное...
Вдруг сейчас на самом деле подхватился системный шрифт, кто его знает, ведь имена то совпадают.


Последний раз редактировалось iNils; 25.07.2013 в 15:43.
Старый 05.07.2013, 01:25
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 6  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 Fogflasher

А у используемых вами шрифтов есть вообще поддержка такого большого размера? Я с большими размерами не экспериментировал, мне хватало 10-12, максимум 14 размеров.
__________________
interplanety

Старый 05.07.2013, 09:35
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 7  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Korchy,
Я не знаю, а как определить эту поддержку?
Я думал что у ttf шрифтов размер какбэ любой может быть.

Попробовал немного другой подход:

Код AS3:
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);
    }
  }
}
Но в этом случае непонятно, если ставить галочку BitmapText, то где прописывать вот это вот более хитрое имя файла, типа Chiller_30_pt_st.

Старый 05.07.2013, 09:57
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
http://flasher.ru/forum/showthread.php?t=169912
__________________
Reality.getBounds(this);

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 Fogflasher

Попробуйте сначала сделать точно по тому, как я написал в посте по ссылке (это где "встроить шрифты стандартным образом"). Вот пример с вашим шрифтом Chiller размера 30 встроенном в проект. Заодно приложил файлы проекта (сделано на коленке в CS4).

tmpfont.swf   (15.7 Кб)
Вложения
Тип файла: swf tmpfont.swf (15.7 Кб, 139 просмотров)
Тип файла: zip tmpfonr.zip (22.1 Кб, 28 просмотров)
__________________
interplanety

Старый 05.07.2013, 16:01
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 10  
Ответить с цитированием
Fogflasher

Регистрация: 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 , внедрение шрифтов , шрифт
Опции темы
Опции просмотра

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

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


 


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


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