Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите с Embed! (http://www.flasher.ru/forum/showthread.php?t=158537)

GooDMAGE 20.06.2011 20:54

Помогите с Embed!
 
Всем привет!
Как встроить шрифт во флешку?
На данный момент делаю так:
Код AS3:

package bin.Text 
{
        import flash.display.MovieClip;
        import flash.text.*;
        /**
        * ...
        * @author GooDMAGE
        */

        public class Text extends MovieClip
        {
                [Embed (source = "fonts\visitor1.ttf", fontFamily = "Visitor", mimeType = "application/x-font-truetype", embedAsCFF = "false")]
 
                //Vars
                private var Name:TextField;
                private var style:TextFormat;
 
                public function Text()
                {       
                        style = new TextFormat();
                        style.font = "Visitor";
                        style.size = 15;
                        style.color = 0xFFFFFF;
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void
                {
                        Name = new TextField;
                        Name.embedFonts = true;
                        Name.setTextFormat(style);
                        Name.defaultTextFormat = style;
                        Name.antiAliasType = AntiAliasType.NORMAL;
                        Name.selectable = false;
                        Name.type = "dynamic";
                        Name.autoSize = TextFieldAutoSize.CENTER;
                        Name.text = TexT;
                        Name.x = cX;
                        Name.y = cY;
                        Name.maxChars = 15;
                        addChild(Name);
                }
 
        }
 
}

Но текст не отображается. Хотя если закомментить Name.embedFonts = true; то текст появляется ,но с обычным шрифтом. Код пишу во FD. Знающих прошу помочь/объяснить почему не отображается шрифт ,и как это исправить!:)

samana 20.06.2011 21:17

Вот этот шаблон всегда мне помогает:
Код AS3:

[Embed(source = '../lib/winter.ttf',fontName='имя',embedAsCFF='false')] public var winterFont:Class;
 
var tf:TextField = new TextField();
tf.embedFonts = true;
tf.defaultTextFormat = new TextFormat("имя", 15, 0);


GooDMAGE 20.06.2011 21:20

Хм.... шас попробую!
что за путь? "../lib/winter.ttf"? lib - это библиотека?

dimarik 20.06.2011 21:39

просто путь

GooDMAGE 20.06.2011 21:53

Хм... модифицировал код
Код AS3:

package bin.Text 
{
        import flash.display.MovieClip;
        import flash.text.*;
        /**
        * ...
        * @author GooDMAGE
        */

        public class Text extends MovieClip
        {
                [Embed (source = 'fonts\visitor1.ttf', fontName = 'Visitor', embedAsCFF = 'false')] public var visitor_font:Class;
 
                //Vars
                private var Name:TextField;
 
                public function Text()
                {       
 
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void
                {
                        Name = new TextField;
                        Name.embedFonts = true;
                        Name.defaultTextFormat = new TextFormat("Visitor", 15 , 0);
                        Name.antiAliasType = AntiAliasType.ADVANCED;
                        Name.selectable = false;
                        Name.type = "dynamic";
                        Name.autoSize = TextFieldAutoSize.CENTER;
                        Name.text = TexT;
                        Name.x = cX;
                        Name.y = cY;
                        Name.maxChars = 15;
                        addChild(Name);
                }
 
        }
 
}

Вызываю в основном классе _text.TEXT("test", 100, 200);
текст не видно =( Где на сей раз ошибка

Добавлено через 18 часов 11 минут
Может кто нибудь сделать исходник со встраиванием шрифта для FD и скомпилированным на CS3?
Заранее спасибо =)

tsarapkabel 21.06.2011 16:19

Код AS3:

package {
 
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.text.*;
        import flash.utils.Timer;
 
        public class TextRotation extends Sprite {
 
                [Embed(source = "C:/WINDOWS/Fonts/comic.ttf", fontFamily = "hzFamily", embedAsCFF="false")]
                private var comTxt:String;
                //Для плееров <10 нужно удалить свойство embedAsCFF="false"
 
                private var txtCanvas:Sprite = new Sprite();
 
                public function TextRotation() {
 
                        var txt:TextField = new TextField();
                        txt.embedFonts = true;
                        txt.autoSize = TextFieldAutoSize.LEFT;
                        txt.border = true;
 
                        var txtFmt:TextFormat = new TextFormat(); //Создаём формат для задания шрифта
                        txtFmt.font = "hzFamily";
                        txtFmt.size = 30;
                        txt.defaultTextFormat = txtFmt; //Устанавливаем формат для textField
                        txt.text = "fasdаффвыаsdfasdf";
 
                        txtCanvas.x = txtCanvas.y = 350;
 
                        txtCanvas.addChild (txt);
                        this.addChild(txtCanvas);
 
                        var timer:Timer = new Timer (16);
                        timer.addEventListener (TimerEvent.TIMER, onTimer, false, 0, true);
                        timer.start();
                }
 
                private function onTimer (event:TimerEvent):void {
                        if (txtCanvas.rotation <= 360) txtCanvas.rotation += 1;
                        else txtCanvas.rotation -= 360;
                }
        }
}


GooDMAGE 21.06.2011 17:12

Сколько не изменял все равно не появляется текст =\
вот код:
Код AS3:

package bin.Text 
{
        import flash.display.MovieClip;
        import flash.text.*;
        /**
        * ...
        * @author GooDMAGE
        */

        public class Text extends MovieClip
        {
                [Embed (source = 'visitor.ttf', fontName = 'Visitor', embedAsCFF = 'false')] public var visitor_font:Class;
 
                public function Text()
                {       
                        TEXT("test", 10 , 10);
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void
                {
                        var Name:TextField = new TextField;
                        Name.embedFonts = true;
                        Name.defaultTextFormat = new TextFormat("Visitor", 15 , 0xFFFFFF);
                        Name.antiAliasType = AntiAliasType.ADVANCED;
                        Name.selectable = false;
                        Name.type = "dynamic";
                        Name.autoSize = TextFieldAutoSize.CENTER;
                        Name.text = TexT;
            Name.x = cX;
                        Name.y = cY;
                        Name.maxChars = 15;
                        addChild(Name);
                }       
        }
 
}

Шрифт лежит в одной папку с классом Text

tsarapkabel 21.06.2011 17:28

Твой код работает.

Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.text.*;
 
        public class Text extends MovieClip {
 
                [Embed (source = 'visitor.ttf', fontName = 'Visitor', embedAsCFF = 'false')]
                public var visitor_font:Class;
 
                public function Text() {       
                        TEXT("test", 10 , 10);
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void {
                        var Name:TextField = new TextField(); //сюда добавил скобки
                        Name.embedFonts = true;
                        Name.defaultTextFormat = new TextFormat("Visitor", 15 , 0xFF00FF); //здесь был белый
                        Name.antiAliasType = AntiAliasType.ADVANCED;
                        Name.selectable = false;
                        Name.type = "dynamic";
                        Name.autoSize = TextFieldAutoSize.CENTER;
                        Name.text = TexT;
                        Name.x = cX;
                        Name.y = cY;
                        Name.maxChars = 15;
                        addChild(Name);
                }       
        }
}


GooDMAGE 21.06.2011 17:33

а у меня нет О_О
добавил скобки все равно текст не появился =(

tsarapkabel 21.06.2011 17:35

Если ты прочитал мои комментарии, давай описание ошибки.

GooDMAGE 21.06.2011 17:39

ошибки нет!
Но если закомментить строчку с Name.embedFonts = true;
то текст появляется ,но со стардартным шрифтом!
Если что пишу в FD компилирую в CS3!

GBee 21.06.2011 17:45

Может шрифт регать надо? Font.registerFont?

GooDMAGE 21.06.2011 17:48

Попробовал!
Выкинул ошибку:
TypeError: Error #2007: Parameter font must be non-null.
at flash.text::Font$/registerFont()
at bin.Text::Text/TEXT()
at bin.Text::Text$iinit()
at bin::Main/::NewGame()

Народ кто нибудь проверите мой код с каким нибудь шрифтом!Скажите работает или нет =)

Добавлено через 5 минут
Или напишите рабочий исходник!

tsarapkabel 21.06.2011 17:53

Цитата:

Сообщение от GooDMAGE (Сообщение 1005420)
Народ кто нибудь проверите мой код с каким нибудь шрифтом!Скажите работает или нет =)

См. пост №8.

BlooDHounD 21.06.2011 18:01

Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.text.*;
 
        public class Text extends MovieClip {
 
                [Embed (source = 'visitor.ttf', fontName = 'Visitor', embedAsCFF = 'false')]
                private static const visitor_font:Class;
                Font.registerFont( visitor_font );
 
                public function Text() {       
                        TEXT("test", 10 , 10);
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void {
// ...
                }       
        }
}


tsarapkabel 21.06.2011 18:03

Вложений: 1
Рабочий пример CS5.

GooDMAGE 21.06.2011 18:09

2 BlooDHounD
исправил вот что выкидывает
Warning: 1110: The constant was not initialized.
2 tsarapkabel а можно cs3?ну или cs4?

tsarapkabel 21.06.2011 18:16

Вложений: 1
Цитата:

Сообщение от GooDMAGE (Сообщение 1005434)
можно cs3?ну или cs4?

Это ничего не изменит, там пустой фла, в котором в поле класса документа прописано 'Text', можешь сам сделать хоть для cs2.

v CS4 attachment included v

-De- 21.06.2011 18:19

Мне что-то такое помнится, что CS3 не знает [Embed] вообще, нет такого?

GooDMAGE 21.06.2011 18:36

Перевел проект из CS3 в СS4 он ожил теперь хотя бы ошибку выкидывает =)
transcoding parameter 'embedAsCFF' is not supported by 'flex2.compiler.media.FontTranscoder'
Unable to transcode visitor1.ttf.

Добавлено через 1 минуту
и да исходник tsarapkabel компилируется с такой же ошибкой =(

GBee 21.06.2011 18:50

ну так уберите параметр embedAsCFF. Можно еще добавить mimeType="application/x-font".

GooDMAGE 21.06.2011 19:22

Если убрать!То остается 2 ошибка!

GBee 21.06.2011 19:38

а где этот ttf-файлик лежит? Создается впечатление, что все из-за того что не находит указанного шрифта.

GooDMAGE 21.06.2011 19:45

он лежит в папке с классом Text.as

BlooDHounD 21.06.2011 20:12

Код:

Warning: 1110: The constant was not initialized.
эту ошибку породили не мои изменения.

GooDMAGE 21.06.2011 20:16

может дело в CS4?

Добавлено через 2 часа 19 минут
Ну так у кого какие идей как это дело в CS3 или в CS4 запустить?

BlooDHounD 22.06.2011 01:32

я написал как в CS4. что не работает?

serogah 22.06.2011 02:58

Привет!
Чтобы использовать тег метаданных Embed в Adobe Flash, версия должна быть не ниже CS4, плюс должен быть flex SDK, который можно скачать отсюда: http://opensource.adobe.com/wiki/dis...ownload+Flex+3

После скачивания, распаковываем flex SDK в какую-нибудь папку.

Дальше, настроим путь к flex SDK во флэш:
1) Ctrl+U, откроется окно настроек
2) Слева, в списке, выбираем Action Script
3) Внизу, есть кнопка "Параметры Action Script 3.0" - нажимаем ее (у меня флэш русифицированный, поэтому названия кнопок пишу русскими)
4) В открывшемся диалоговом окне, в самом верху, вводим путь к flex SDK.

Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.text.*;
        /**
        * ...
        * @author GooDMAGE
        */

        public class Text extends MovieClip
        {
                [Embed (source = "tahoma.ttf", fontFamily = "Visitor", mimeType = "application/x-font-truetype", embedAsCFF = "false")]
 
                public static var EverydayFont:Class;
 
                //Vars
                private var Name:TextField;
                private var style:TextFormat;
 
                public function Text()
                {       
                        var font:Font=new EverydayFont();// добавлено
 
                        style = new TextFormat();
                        style.font = font.fontName;
                        style.size = 15;
                        style.color = 0xFF0000;
                }
 
                public function TEXT(TexT:String, cX:int, cY:int):void
                {
                        Name = new TextField();
                        Name.autoSize = TextFieldAutoSize.CENTER;
                        Name.embedFonts = true;
                        Name.defaultTextFormat = style;
                        Name.antiAliasType = AntiAliasType.NORMAL;
                        Name.selectable = false;
                        Name.type = TextFieldType.DYNAMIC;
                        Name.text = TexT;
            Name.x = cX;
                        Name.y = cY;
                        Name.maxChars = 15;
                        Name.setTextFormat(style);/* перемещено
                                                              Name.setTextFormat(style); всегда должно быть
                                                              после Name.text = TexT;
 
                                                            */

 
                        addChild(Name);
                }
 
        }
 
}

Вот рабочий проект
http://***********/5398105

Если все равно проблемы, пиши на почту: serogah@rambler.ru

GooDMAGE 23.06.2011 19:52

Делаю все как сказано выше !Указываю папку где лежит flex SDK.
Компилирую и все равно 2 ошибки:
transcoding parameter 'embedAsCFF' is not supported by 'flex2.compiler.media.FontTranscoder'
Unable to transcode visitor.ttf.

BlooDHounD 23.06.2011 20:20

ну потому что флекс видать не поддерживает embedAsCFF. и действия очевидны и описаны выше.

GooDMAGE 23.06.2011 20:43

Всем большое спасибо!
Все работает. Удачи всем)


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

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