Форум 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=157024)

mono.solar 30.05.2011 16:06

Побуквенная анимация программно.
 
Привет!
Делаю мультимедийный ролик на greensock. Появилась необходимость сделать побуквенную анимация текста.
В мануалах greensock сказано:
Код AS1/AS2:

//tween every MovieClip in the "letters" Array up 100 pixels (changing their "y" property to a relative value of "-100") over 2 seconds while fading out, and stagger the start time of each tween by 0.1 seconds. There could literally be hundreds of MovieClips in the "letters" Array and this one line of code would tween them all!
TweenMax.allTo(letters, 2, {y:"-100", alpha:0}, 0.1);

Способ реализации пока нашел только один:
- разбить текст на буквы
- каждую (!!!) букву замувиклипить, назвать (!!!!!) и програмно добавить в массив letters.

Прошу подсказать более простой и человечный путь решения вопроса.

Ещё есть вопрос: есть ли в AS3 в какомнить из классов метод (массив например) где хранятся названия (или ID) всех мувиклипов на сцене? Спасибо.

alatar 30.05.2011 16:58

Код AS3:

var str:String = "dfhsidaufhkaljshdfkl klajsd fhlkasjd falskdfj lksjdhfqiweu";
var chars:Array = str.split(""); //буквыыыы
var letters:Array = []; //массив с текстовыми полями
for (var i:int = 0; i < chars.length; i++)
{
    var tf:TextField = new TextField(); //настроить по-вкусу
    tf.text = chars[i];
    letters.push(tf);
}
...


incvizitor 30.05.2011 17:44

Не люблю скидывать ссылки на то что не доделано, но можете у посмотреть реализацию:
http://code.google.com/p/vaukalak/so...kalak/tae/#tae

Правда там сделано примерно на 40%.

mono.solar 30.05.2011 18:23

to alatar: Спасибо, но боюсь в Вашем примере ещё понадобится каждый tf водружать на экран
to incvizitor: Ого, целый эффект! Не поясните, что означает на 40% ? Если импортировать Вашу библиотеку эффект не будет работать?

incvizitor 30.05.2011 18:37

Цитата:

to incvizitor: Ого, целый эффект! Не поясните, что означает на 40% ? Если импортировать Вашу библиотеку эффект не будет работать?
Я думаю даже меньше чем 40%)

1 - структура библиотеки несколько поменяется. Сейчас там объект - эффект создает декоратор для текстового поля. Вот я не знаю что лучше оставить так, или же просто создавать декораторы/прототипы и передавать их.
2 - Сейчас написно только 2 эффекта (планируется около 20 - 50). Да и они глючат, не поддерживают easing и тд.
3 - Сейчас текстовое поле можно разбивать только на символы, можно будет так же и на слова и на строчки.
4 - Эффектов появления тоже 2: последовательный и рандомный. Тоже хотелось бы больше.

В общем я хочу сделать что то похожее на: http://www.flasheff.com/patternsshowcase/

Но работа, работа и еще раз работа. На все времени не хватает.

firuz 13.09.2011 16:53

Вернусь к этому вопросу. Каким образом можно анимировать текст, работая с каждой буквой отдельно?
Понятно, что можно разбить текст на буквы, каждую (или одинаковые буквы) в мувиклипы и т.д.
А может есть другие пути?

SvetozarPNZ 13.09.2011 17:42

Я не мостак быстро код писать, но идея такова:
1. Разбить текст на буквы с помощью методов String.
2. Каждую букву запихать в TextField.
3. Программно анимировать текстовые поля.

P.S. Ссылочка incvizitor'а просто очуменная. Надо б такие эффекты для своего опросника попробовать сделать.

firuz 14.09.2011 01:44

SvetozarPNZ, т.е. предлагаешь вытащить текст, удалить его со сцены предварительно сохранив в переменной, разбить по символам, каждый символ запихать в текстфилд и расставить опять на сцене?
А как же сохранить нюансы текстовой верстки и т.д.? Нет, я не критикую.. понятно, что делать надо ну как-бы именно так. Других то инструментов нет.. Но вдруг осталось что-то, что я упустил работая с текстовыми полями..

И да. О какой именно ссылочке идет речь? О ФлешЭф или на ГуглКод?
Собственно, напоровшись в сети на флешэфф я пришел с вопросом сюда, и рад был, что тема уже поднималась.

alatar 14.09.2011 01:52

Цитата:

А как же сохранить нюансы текстовой верстки и т.д.?
Какие-такие нюансы которые нельзя сохранить?

firuz 14.09.2011 01:57

Цитата:

Сообщение от alatar (Сообщение 1031241)
Какие-такие нюансы которые нельзя сохранить?

ну надо же будет заново расставлять буквы на сцене. Нет? А как же кернинг, например?
при таком подходе, как я понял, это трудно будет повторить.. хотя.. зная ширину буквы

alatar 14.09.2011 02:00

getCharBoundaries()

firuz 14.09.2011 02:15

Цитата:

Сообщение от alatar (Сообщение 1031245)

да. но странные значения он выдает!

letters - это массив букв. Делаем ректангл с первой буквой. А потом пользуемся его шириной.. Если я правильно все понял.
Код AS3:

var bnds:Rectangle = letters[ind].getCharBoundaries(0);

но значения для каждой буквы слишком сильно различаются
или я глупости пишу?

Dron1564 14.09.2011 04:14

Код AS3:

 private function TextToMcArray(text:String, params:Object = null ):Array {
        var lettersArray:Array = new Array();
        var mc:MovieClip;
        var textField:TextField;
        var fontInterval:Number = 2;
        var AddChildTo:*;
        var x:Number = 0;
        var y:Number = 0;
        var newFormat:TextFormat;
 
        if( params ){
            fontInterval = params.hasOwnProperty("fontInterval")?params.fontInterval:2;
            AddChildTo = params.hasOwnProperty("addChildTo")?params.addChildTo:null;
            x = params.hasOwnProperty("x")?params.x:0;
            y = params.hasOwnProperty("y")?params.y:0;
            newFormat = params.hasOwnProperty("textFormat")?params.textFormat:null;
        }
 
        for( var i:int = 0; i<text.length; i++ ){
            mc = new MovieClip();
            textField = new TextField();
            if( newFormat ){
                textField.defaultTextFormat =  newFormat ;
            }
            textField.text = text.charAt(i);
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.selectable = false;
            mc.addChild(textField);
            mc.x = x;
            mc.y = y;
            lettersArray.push(mc);
            if( AddChildTo ){
                AddChildTo.addChild( mc );
            }
            x += mc.width*0.55+fontInterval;
        }
        return lettersArray;
    }
}

Делал давно.. очень давно ))


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

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