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

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

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

Регистрация: Mar 2009
Сообщений: 30
По умолчанию Подгрузка шрифта из внешнего .swf. Не выводит кириллицу

всем привет.

сразу хочу сообщить, что пользовался поиском, но после двух дней решил сдаться и спросить.

В стадии обучения решил потренироваться подгружать шрифты из внешних swf. Вшнешний swf скомпилирован из пустого fla файла, в библиотеке которого пролинкованый шрифт. Шрифт обычный Arial. Подгружаю шрифт, регистрирую, подставляю и трындец... латинские символы на ура, а кириллица не выводится. Текст "забит" прямо в as файл и посему исключаю недоразумения с кодировками.

главный класс:
Код AS3:
package {
 
 	import flash.display.Sprite;
 	import flash.text.*;
 	import flash.events.*;
 
 	public class Main extends Sprite {
 
 	 	var t:TextField = new TextField();
 	 	var f = new TextFormat();
 
 	 	public function Main() {
 
 	 	 	var font = new LoadFont("Font.swf",["Symbol1"]);
 	 	 	font.addEventListener(LoadFont.COMPLETE, successLoadFont);
 	 	 	font.addEventListener(LoadFont.ERROR, failLoadFont);
 	  	}
 
 	 	private function failLoadFont(e:Event){
 	 	 	f.font = "Arial";
 	 	 	t.embedFonts = false;
 	 	 	post();
 	 	}
 
 	 	private function successLoadFont(e:Event){
 	 	 	var embeddedFonts:Array = Font.enumerateFonts(false);
 	 	 	f.font = embeddedFonts[0].fontName;
 	 	 	t.embedFonts = true;
 	 	 	post();
 
			var fontArray:Array = Font.enumerateFonts(false);
			for(var i:int = 0; i < fontArray.length; i++) {
				var thisFont:Font = fontArray[i];
				trace(i+") name: " + thisFont.fontName +"  typeface: " + thisFont.fontStyle);
			}
 	 	}
 
 	 	public function post(){
 	 	 	f.size = 36;
 	 	 	t.defaultTextFormat = f;
 	 	 	t.x = 100;
 	 	 	t.y = 100;
 	 	 	t.background = true;
			t.autoSize = TextFieldAutoSize.CENTER;
 	 	 	t.text = "Это тестовый текст";
 
 	 	 	addChild(t);
 	 	}
 	}
}
класс загрузки шрифтов:
Код AS3:
package {
 
 	import flash.display.*;
 	import flash.events.*;
 	import flash.text.*;
 	import flash.errors.*;
 	import flash.system.*;
 	import flash.net.*;
 
 	public class LoadFont extends EventDispatcher {
 
 	 	public static const COMPLETE:String = "complete";
 	 	public static const ERROR:String = "error loading font";
 	 	private var loader:Loader = new Loader();
 	 	private var _fontsDomain:ApplicationDomain;
 	 	private var _fontName:Array;
 
 	 	public function LoadFont(url:String,fontName:Array):void {
 	 	 	_fontName = fontName;
 	 	 	trace("loading");
 	 	 	loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, font_ioErrorHandler);
 	 	 	loader.contentLoaderInfo.addEventListener(Event.COMPLETE,finished);
 	 	 	loadAsset(url);
 	 	}
 
 	 	private function loadAsset(url:String):void {
 	 	 	var request:URLRequest = new URLRequest(url);
 	 	 	loader.load(request);
 	 	}
 
 	 	function finished(evt:Event):void {
 	 	 	_fontsDomain = loader.contentLoaderInfo.applicationDomain;
 	 	 	registerFonts(_fontName);
 	 	 	dispatchEvent(new Event(LoadFont.COMPLETE));
 	 	}
 
 	 	function font_ioErrorHandler(evt:Event):void {
 	 	 	dispatchEvent(new Event(LoadFont.ERROR));
 	 	}
 
 	 	public function registerFonts(fontList:Array):void {
 	 	 	for (var i:uint = 0; i < fontList.length; i++) {
 	 	 	 	Font.registerFont(getFontClass(fontList[i]));
 	 	 	}
 	 	}
 
 	 	public function getFontClass(id:String):Class {
 	 	 	return _fontsDomain.getDefinition(id)  as  Class;
 	 	}
 
 	 	public function getFont(id:String):Font {
 	 	 	var fontClass:Class = getFontClass(id);
 	 	 	return new fontClass    as  Font;
 	 	}
 	}
}
Работаю в Flash CS3 и варианты с embed тегом не выходят. ОС Макинтош, шрифты стандартные.
Трэйс выводит:
loading
0) name: Arial typeface: bold

при t.embedFonts = false; всё отображается как нужно, но ведь это не выход из положения. Интересуют все возможные варианты вплоть до редактирования шрифтов. Учусь так сказать

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так а в файле со шрифтом, для этого шрифта указан диапазон, включающий кириллицу?
__________________
Reality.getBounds(this);

Старый 03.11.2011, 23:05
ded100let вне форума Посмотреть профиль Отправить личное сообщение для ded100let Найти все сообщения от ded100let
  № 3  
Ответить с цитированием
ded100let

Регистрация: Mar 2009
Сообщений: 30
в CS3, на сколько я знаю нет такой функции или я ошибаюсь? Знаю, что есть возможность указать диапазон для конкретного текстового поля.... Пробывал создавать текстовое поле, задавать в нем диапазон символов (кирилица и цифры) и без результата.... Выводит только латиницу. Пробовал "ковыряться" в файле шрифта и удалить всё не нужное.... оставил только цифры и кириллицу. В итоге текст кириллицей не виден вобще, а текст на латинице выводится квадратами... Даже и не знаю что и делать теперь.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Перестаньте ковыряться в файлах шрифта, они ни в чем не виноваты.
2. Извините что сомневаюсь в Вашей внимательности, но когда Вы создавали текстовое поле и настраивали диапазон эмбеда, Вы:
а) точно использовали то НАЧЕРТАНИЕ, которое нужно, то есть болд, если в библиотеке Arial Bold? А то многие считают, что все начертания шрифта находятся в одном файле, что конечно же не так.
б) Вы написали в поле хоть одну букву? Или оставили его пустым?
__________________
Reality.getBounds(this);

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

Регистрация: Mar 2009
Сообщений: 30
Загружал Arial, Arial Bold Cyr, Verdana - выводится только латиница. Уже точно не помню, но вроде бы загрузив Tahoma или Times появилась кирилица. Текст в текстовое поле писал и не писал... В обеих случаях одно и тоже.

Добавлено через 27 часов 52 минуты
заметил, что если подгружаемый файл запустить во время редактирования, то и в нем не отображается кириллица. Во время редактирования кириллица отображается корректно почти со всеми шрифтами. Может это сам Flash "криво" работает? Есть ли какие-то настройки относительно шрифтов?

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

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

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


 


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


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