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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.04.2009, 20:56
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 31  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
willis83, встраивание шрифтов в Adobe Flash CS4 (Professional) дело несложное. Раз уж вы кучу инфы перерыли и так и не поняли, как это делается, попытаюсь объяснить Вам еще раз. Может у меня лучше получится?!))
Есть два способа встраивания шрифтов в свое Flash-приложение:
-традиционный Flash способ. В среде разработки Adobe Flash CS4 открываем библиотеку символов. Правой кнопкой мыши вызываете контекстное меню, в котором выбираете пункт New Font... Далее из выпадающего списка шрифтов (Font), установленных в системе, выбираем тот, который собираемся использовать в своем Flash-приложении. Убираем галочку с пункта Bitmap text. Пункт Name играет чисто косметическую роль для отображения имени шрифта в библиотеки символов. Теперь ставим галочки напротив пунктов Action For ActionScript и Export In Frame 1. После всего этого жмем "Ok" (Flash выведет Вам предупреждение о том, что класс шрифта не найден и будет создан автоматически при экспорте в SWF-файл, можете смело игнорировать данное предупреждение). Вот и всё - шрифт встроен.
Однако, Вы можете быть очень удивлены, что шрифт, поддерживающий русский язык фактически не отображает его в проекте. Такое часто происходит в CS4 с ttf-шрифтами, подерживающими русский язык. Суть проблемы со шрифтами TTF заключается в том, что в большинстве (но не во всех!) существующих кириллических шрифтов Unicode-индексы символов, изображающих русские буквы, соответствуют латинской кодовой таблице CP1252, а не кириллической CP1251. Поэтому среда разработки попросту не обнаружит глифов для отображения кирилицы, а следовательно, если текстовое поле отоборжает текст с помощью встроенных шрифтов (myTextField.embedFonts=true) русский текст отображен не будет. В этом случае приходит на помощь нетрадиционный для Flash способ встраивания шрифтов...Способ второй "Flex спешит на помощь" читай ниже...
-Второй способ заключается во встраивании шрифтов не с помощью среды разработки Flash, а с помощью AS 3.0 кода и библиотеки Flex SDK. Последняя распространяется бесплатно, актуальный релиз можно скачать с официального сайта корпорации Adobe. Итак скачиваем Flex SDK, создаем новый as-файл следующего содержания (к примеру):
Код AS3:
package {
	import flash.display.Sprite;
	import flash.text.*;
 
	public class Fonts extends Sprite{
 
		[Embed(source="c:/windows/fonts/Arial.ttf", fontFamily="Arial")]
		private var arial:Class;
 
		[Embed(source="c:/windows/fonts/univers ru.ttf", fontFamily="Univers")]
		private var univers:Class;
 
		[Embed(source="c:/windows/fonts/domino.ttf", fontFamily="a_DomIno")]
		private var domino:Class;
 
		[Embed(source="c:/windows/fonts/lcdnova.ttf", fontFamily="a_LCDNova")]
		private var lcdnova:Class;
 
		[Embed(source="c:/windows/fonts/huxl_c.ttf", fontFamily="a_HuxleyCaps")]
		private var huxleycaps:Class;
 
		[Embed(source="c:/windows/fonts/crystal.ttf", fontFamily="Crystal")]
		private var crystal:Class;
 
 
		public function Fonts()
		{
			Font.registerFont(arial);
			Font.registerFont(univers);
			Font.registerFont(domino);
			Font.registerFont(lcdnova);
			Font.registerFont(huxleycaps);
			Font.registerFont(crystal);
 
		}
	}
}
Далее с помощью среды разработки компилируем этот класс в swf-файл (программа Вас попросит прописать путь к Flex SDK) и затем используем его для динамической загрузки шрифтов в проект на этапе выполнения.

ВНИМАНИЕ!!! Эти два способа не взаимоисключаемые, их можно использовать в комбинации. Например, шрифты, с которыми не возникает проблем могут быть встроены с помощью традиционного метода (да, в таком случае, не забудьте в первом кадре fla-файла с помощью статического метода класса Font - registerFont, добавить втроенные шрифты в глобальный список шрифтов) а проблемные путем подключения класса Fonts. Будьте внимательны, возможно такое, что шрифты, которые нормально внедряются через библиотеку символов - оплошаются при их внедрении с помощью Flex SDK (а чаще всего так и происходит).

Старый 05.04.2009, 21:12
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 32  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Спасибо! Достойный, развёрнутый ответ. На счёт первого способа, уже столкнулся с проблемой: шрифт встроил, но при
Код AS3:
mytext.embedFonts = true;
текст всё равно не видимый

Добавлено через 1 минуту
текст на английском

Старый 05.04.2009, 21:24
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 33  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
willis83, встроили шрифт с пощью библиотеки символов. Проверьте наличие глифов для английского текста и для русского следующим методом:
Код AS3:
var fontName:String="yourFont"; /*Имя шрифта, который проверяем на наличие необходимых глифов (имя шрифта указывайте то, которое отображается в поле Class (библиотека символов, ваш шрифт))*/
var font:Font; //В эту переменную позже запишем ссылку на экземпляр класса Font
var fonts:Array=Font.enumerateFonts(false); /*Статический метод класса Font, который возвращает список .встроенных шрифтов */
 
for(var i:int=0; i<fonts.length; i++){
if(fonts[i].fontName==fontName){
 font=fonts[i];
 break;
}
}
 
trace(font.hasGlyphs("Привет, Мир!"));
//Выводит false, т.е. в шрифте yourFont отсутствуют необходимые глифы для отображения русского текста.
trace(font.hasGlyphs("Hellow, Word!"));
//Выводит false, т.е. в шрифте yourFont отсутствуют необходимые глифы для отображения английского текста.
Если в обоих случаях будет false, выложите мне шрифт.
P.S. каким способом форматируете TextField? Передаете ссылку на экземпляр класса TextFormat в свойство defaultTextFormat экземпляра класса TextField, или же с помощью метода экземпляра класса TextField setTextFormat??


Последний раз редактировалось Мечтатель; 05.04.2009 в 21:30. Причина: .
Старый 05.04.2009, 22:16
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 34  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Чё-то я прикола не пойму, у меня он не видит встроенный шрифт, т.е. при попытке скомпилить ваш код выдаёт ошибку:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
ссылуи я правильно прописал, галочки все поставил... не знаю почему не видит

Добавлено через 1 минуту
про способ форматирования - setTextFormat

Старый 05.04.2009, 22:20
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 35  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
willis83, скиньте мне исходник.))
Используйте defaultTextFormat

Старый 05.04.2009, 22:43
willis83 вне форума Посмотреть профиль Отправить личное сообщение для willis83 Найти все сообщения от willis83
  № 36  
Ответить с цитированием
willis83
 
Аватар для willis83

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
вот...
Вложения
Тип файла: rar 123.rar (192.7 Кб, 34 просмотров)

Старый 05.04.2009, 23:07
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 37  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
willis83, простите меня за описку, при проверке на наличие глифов нужно указывать Имя Шрифта, которое указано в поле Font. У меня показало, что этот встроенный шрифт не содержит глифов для отображения русского текста, так что встраивать его нужно посредством Flex SDK 3.0.2

Это код рабочего класса main (блин, давайте имена классам с Большой буквы, а то, глаза режет))))
Код AS3:
package { 
	import flash.display.Sprite;
	import flash.text.*;
 
	public class main extends Sprite { 
    	public function main():void { 
			var myTf:TextField = new TextField();
		    myTf.text = "hfghfghgfhвпвтволаббю";
 
			var format:TextFormat = new TextFormat();
			format.color = 0xFF0000;
			format.font = "Tahoma";
			format.size = 35;
 
			myTf.embedFonts = true;    
			myTf.y = 100;
			myTf.x = 100;
			myTf.width = 800;
			myTf.setTextFormat(format);
			addChild(myTf);
			//var fontName:String="MyFont"; /*Имя шрифта, который проверяем на наличие необходимых глифов (имя шрифта указывайте то, которое отображается в поле Class (библиотека символов, ваш шрифт))*/
			//var font:Font; //В эту переменную позже запишем ссылку на экземпляр класса Font
			//var fonts:Array=Font.enumerateFonts(false); /*Статический метод класса Font, который возвращает список .встроенных шрифтов */
 
			//for(var i:int=0; i<fonts.length; i++){
			//if(fonts[i].fontName==fontName){
 			//font=fonts[i];
 			//break;
			//}
			//}
            //trace(font.hasGlyphs("Привет, Мир!"));
            //trace(font.hasGlyphs("Hellow, Word!"));
		};
	};
};
отображается только латиница. Встраивать нужно посредством Flex этот шрифт. У Вас есть Flex SDK?

P.S. В fla-файле в библиотеке Вы все встроили правильно.)

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Flex SDK сегодня перепишу и попробую разобраться со вторым способом

Старый 06.04.2009, 15:57
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 39  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Делал проект на ас2 (под кс3), сення с дуру снес кс3, но есть кс4, открыл, сразу же скомпилил (ничего не менял) и как пишете выше "Однако, Вы можете быть очень удивлены" Ага, русские шрифты пропали, хотя все честь по чести, в библиотеке валяется самый обычный Trebuchet MS / 10 с линкейджем. Как тут быть?..второй способ как понял только для ас3?

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
да, похоже второй способо только для ас3, т.к. поддержка embed необходима. Мне кажется что если нет надобности с текстом выделывать трюки, то можно остановиться на использовании не втроенных шрифтов и не парить мозги

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

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

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


 


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


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