Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   сложности с вращением картинки с нанесенным текстом (http://www.flasher.ru/forum/showthread.php?t=174426)

Nikolay00700 25.01.2012 11:53

сложности с вращением картинки с нанесенным текстом
 
Возникла следующая проблема:

я создал класс в котором поверх растровой картинки нанесено поле textfield.

Далее создаю объект этого класса и начинаю вращать при помощи rotation.

Но почему-то при вращении объекта отображение текста исчезает. и появляется только тогда, когда rotation=0

Как сделать чтобы картинка вращалась вместе с нанесенным на неё текстом?

Inet_PC 25.01.2012 12:14

embedFonts, не? В 10 плеере вроде можно и без. Может свойства rotationX/Y/Z помогут. Начиная с 10 плеера проблем вроде с этим не было, хотя...
А вообще неплохо бы и класс сам показать, может в нем ошибка.

ObOs 25.01.2012 12:52

Скорее всего надо встраивать шрифт используемый в вашем textfield.

vorodis2 25.01.2012 13:13

var textMy:TextField=new TextField();
textMy.embedFonts = true;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Вот это поможет
textFormat = new TextFormat("Arial", 8, 0, true);
textMy.text = "text";
textMy.setTextFormat(textFormat);

Nikolay00700 25.01.2012 18:02

vorodis2 - Не помогает!

На скорую руку набросал пример класса, который бы проиллюстрировал эту проблему.

Этот класс выводит картинку, а на ней надпись.
При каждом клике на картинку картинка с надписью должна слегка вращаться по часовой стрелке (центр вращения - центр картинки).

картинка-то вращается, а вот текст просто исчезает при повороте...

Код AS3:

package 
{
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.text.TextFormat;
        import flash.events.*;
 
        public class Proba  extends Sprite
        {
                public var image:some_image = new some_image();//картинка 40х40
                private var f_text:TextField = new TextField();
                private var text_format:TextFormat = new TextFormat();
                private var Contein:Sprite = new Sprite();
 
                public function Proba()
                {
                        addChild(image);
                        image.x = -50;
                        image.y = -50;
                        image.width = 100;
                        image.height = 100;
 
                        addChild(f_text);
                        f_text.x = -20;
                        f_text.y = -20;
                        f_text.text  = "proba";
 
                        addChild(Contein);
                        Contein.addChild(image);
                        Contein.addChild(f_text);
 
 
                        text_format.bold = true;
                        text_format.font = "Arial";
                        text_format.size = 18;
                        f_text.textColor  = 0xffffff;
 
                        f_text.setTextFormat(text_format);
 
                        this.x = 100;
                        this.y = 100;
 
                        Contein.addEventListener(MouseEvent.CLICK, move);
 
 
                }
 
                public function move(e:Event):void
                {
                        Contein.rotation += 2;
                }
 
 
 
        }
 
}


ObOs 25.01.2012 18:22

В вашем коде нет строчки
Код AS3:

f_text.embedFonts = true;


GBee 25.01.2012 18:23

Цитата:

vorodis2 - Не помогает!
так а где embedFonts в коде?

Nikolay00700 25.01.2012 19:04

Да пробовал же я... говорю... не помогло, вот и убрал... с ним текст вообще не отображается...
возможно, я что-то не так с ним делаю???

Код AS3:

package 
{
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.text.TextFormat;
        import flash.events.*;
 
        public class Proba  extends Sprite
        {
                public var image:some_image = new some_image();//картинка 40х40
                private var f_text:TextField = new TextField();
                private var text_format:TextFormat = new TextFormat();
                private var Contein:Sprite = new Sprite();
 
                public function Proba()
                {
                        addChild(image);
                        image.x = -50;
                        image.y = -50;
                        image.width = 100;
                        image.height = 100;
 
                        addChild(f_text);
                        f_text.x = -20;
                        f_text.y = -20;
                        f_text.embedFonts = true;
                        f_text.text  = "proba";
 
 
                        addChild(Contein);
                        Contein.addChild(image);
                        Contein.addChild(f_text);
 
 
                        text_format.bold = true;
                        text_format.font = "Arial";
                        text_format.size = 18;
                        f_text.textColor  = 0xffffff;
 
                        f_text.setTextFormat(text_format);
 
                        this.x = 100;
                        this.y = 100;
 
                        Contein.addEventListener(MouseEvent.CLICK, move);
 
 
                }
 
                public function move(e:Event):void
                {
                        Contein.rotation += 2;
                }
 
 
 
        }
 
}


Inet_PC 25.01.2012 19:13

Ну так шрифт заэмбедить нужно, а потом только включать это свойство.

Nikolay00700 25.01.2012 19:17

Но я же использую один из стандартных шрифтов - Arial...
или такое не проходит?

Как тогда это можно сделать?

GBee 25.01.2012 19:25

Заэмбедить Ариал. И дальше, как разжевали выше.

elder_Nosferatu 25.01.2012 19:31

Когдато сам спрашивал. Кинули чтото типа этого примера. Мне помогло...
Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
        import flash.text.TextFormat;
 
        public class Main extends Sprite {
                [Embed(source = 'Square_rough.ttf', fontName = 'Square rough', mimeType = 'application/x-font' )]
                private static const FontClass:Class;
                public static var font:String = (new FontClass()).fontName;
 
                public function Main():void {
                        var format:TextFormat = new TextFormat(font, 50);
                        var field:TextField = new TextField();
                        field.autoSize = "left";
                        field.embedFonts = true;
                        field.setTextFormat(format);
                        field.text = "Example";
                        field.x = 300;
                        field.y = 300;
                        field.rotation = 30;
 
                        addChild(field);
                }
 
        }
 
}


Inet_PC 25.01.2012 19:32

Цитата:

Но я же использую один из стандартных шрифтов - Arial...
Ну не совсем стандартный, на винде может и да (кроме урезанных), а вот на линухах, мобильниках, маках. В общем очень не факт, что у пользователя есть этот шрифт.
Ну, наверное самый простой способ, это создать новый проект в Flash, добавить текстовое поле, выставить нужный шрифт, там же есть опции embed, выбрать нужные символы (для уменьшения размера) и скомпилить. И вот так добавить в проект:
Код AS3:

[Embed ("res/ds_goose.swf", fontFamily = "DS Goose")] 
                private static const TTF_DSGOOSE:Class;

Где DS Goose Имя шрифта, в Вашем случае Arial.

Nikolay00700 25.01.2012 19:59

Код AS3:

package 
{
        import flash.text.TextField;
        import flash.display.Sprite;
        import flash.text.TextFormat;
        import flash.events.*;
 
        public class Proba  extends Sprite
        {
 
                [Embed(source = '../../lib/arialbd.ttf', fontName = 'Arial bold', mimeType = 'application/x-font' )]
                private static const FontClass:Class;
                public static var font:String = (new FontClass()).fontName;
 
 
                public var image:some_image = new some_image();//картинка 40х40
                private var f_text:TextField = new TextField();
                private var text_format:TextFormat = new TextFormat();
                private var Contein:Sprite = new Sprite();
 
                public function Proba()
                {
                        addChild(image);
                        image.x = -50;
                        image.y = -50;
                        image.width = 100;
                        image.height = 100;
 
 
                        addChild(f_text);
                        f_text.x = -20;
                        f_text.y = -20;
                        f_text.embedFonts = true;
                        f_text.text  = "proba";
 
 
                        addChild(Contein);
                        Contein.addChild(image);
                        Contein.addChild(f_text);
 
 
                        text_format.bold = true;
                        text_format.font = font;
                        text_format.size = 18;
                        f_text.textColor  = 0xffffff;
 
                        f_text.setTextFormat(text_format);
 
 
                        this.x = 100;
                        this.y = 100;
 
                        Contein.addEventListener(MouseEvent.CLICK, move);
 
 
                }
 
                public function move(e:Event):void
                {
                        Contein.rotation += 2;
                }
 
 
 
        }
 
}

Ну не работает у меня....
Я не понимаю что снова не так...
По аналогии с предложенным elder_Nosferatu кодом доработал свой...
Результат - без изменений...

Inet_PC 25.01.2012 20:15

Ну так мой вариант попробуйте, должно заработать. Я бы скинул, но у меня Flash не установлен.

Nikolay00700 25.01.2012 22:11

Спасибо. У меня на этом компе тоже Flash не установлен.. Попробую - сообщу, если заработает...
Но это ведь компромисс... Один из вариантов выхода из ситуации...

Но всё-таки:
Так почему же мой код не работает??? Почему не получается сделать без Embed флеш-файла... (и не факт что это решение поможет...

Подскажите, пожалуйста, где в коде ошибка!!!

Inet_PC 25.01.2012 22:23

Цитата:

(и не факт что это решение поможет...
Поможет.
Ну как вариант rotationZ используйте вместо rotation.

Nikolay00700 25.01.2012 23:24

Спасибо!!!!!!!!!!
На самом деле в моем случае можно обойтись без всяких embed..

А вот rotationZ решило проблему!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Спасибо, Inet_PC!!!!!!!

dimarik 25.01.2012 23:37

Что-то типа этого

Inet_PC 25.01.2012 23:49

Цитата:

На самом деле в моем случае можно обойтись без всяких embed..
Ну так почему не воспользовались этим вариантом? И что это за вариант?
Ну а если нужно для FP9 и без эмбеда, то можно отрисовывать в битмап и уже его поворачивать. Скорее всего будет менее производительно.


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

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