Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с циклом for (http://www.flasher.ru/forum/showthread.php?t=168900)

Isaac 25.09.2011 16:01

Работа с циклом for
 
Здравствуйте.
Написал анимацию, в которой текст лежит в спрайте. Этому спрайту задан альфа 0. Анимация должна проходить циклом по спрайту и поочеердно выводить его ребенка, задавая ему альфа1.
Проблема в том, что у меня выводятся сразу все текстовое поле, вместо того, чтоб выводить поочереди каждую букву. Подскажите пожалуйста, что я сделал не так?
Код AS3:

                private function addText():void
                {
                        mainSprite.x = 200;
                        mainSprite.y = 150;
                        mainSprite.mouseChildren = false;
                        addChild(mainSprite);
 
                        OverwriteManager.init(OverwriteManager.AUTO);
 
                        txtFrt = new TextFormat();
                        txtFrt.font = "Arial";
                        txtFrt.bold = true;
                        txtFrt.size = 20;
 
                        txtFrtColor = new TextFormat();
                        txtFrtColor.font = "Arial";
                        txtFrtColor.bold = true;
                        txtFrtColor.size = 20;
                        txtFrtColor.color = 0x00FF00;                       
 
                        txt1 = new TextField();
                        txt1.x = 0;
                        txt1.y = 0;
                        txt1.width = 300;                       
                        txt1.text = message1;                       
                        txt1.setTextFormat(txtFrt);                                       
 
                        while(mainSprite.numChildren > 0)
                        {
                                mainSprite.removeChildAt(0);
                        }       
 
                        for(var i:int = 0; i <= txt1.text.length - 1; i ++)
                        {
                                var txtFld:TextField = new TextField();
                                txtFld.defaultTextFormat = txtFrt;
 
                                txtFld.text = txt1.text.charAt(i);                               
 
                                var charPosition:Rectangle = txt1.getCharBoundaries(i);
                                s = new Sprite();
                                s.x = charPosition.x;
                                s.y = charPosition.y;                       
                                s.alpha = 0;
                                s.addChild(txtFld);
 
                                mainSprite.addChild(s);                                                                                                       
                        }
 
                        animationText();                                               
                }
 
                private function animationText():void
                {
                        var nc:Number = mainSprite.numChildren;                                               
 
                        for(var i:int = 0; i < nc; ++ i)
                        {
                                TweenMax.to(mainSprite.getChildAt(i), 2, {autoAlpha:1});                                                               
                        }
                }


3p.station 25.09.2011 16:38

давайте разберемся что у вас написано. функция animationText
я не припомню что такое autoAlpha... может стоит просто использовать alpha ?
но предпологаю тут другое
сам цикл пробегает и практически одновременно запускает твинны, тоесть все ваши чайлды одновременно начинают проявлятся, не последовательно.
для того чтобы сделать последовательное появление букв используй например TimelineLite из тойже библиотеки.
Код AS3:

var timeLine:TimelineLite = new TimelineLite();
for(var i:int = 0; i < nc; ++ i)
                        {
                                timeLine.append(new TweenLite(mainSprite.getChildAt(i), 2, {alpha:1}));                                               
                        }

примерно так

Isaac 25.09.2011 16:57

Цитата:

Сообщение от 3p.station (Сообщение 1034659)
давайте разберемся что у вас написано. функция animationText
я не припомню что такое autoAlpha... может стоит просто использовать alpha ?
но предпологаю тут другое
сам цикл пробегает и практически одновременно запускает твинны, тоесть все ваши чайлды одновременно начинают проявлятся, не последовательно.
для того чтобы сделать последовательное появление букв используй например TimelineLite из тойже библиотеки.
Код AS3:

var timeLine:TimelineLite = new TimelineLite();
for(var i:int = 0; i < nc; ++ i)
                        {
                                timeLine.append(new TweenLite(mainSprite.getChildAt(i), 2, {alpha:1}));                                               
                        }

примерно так

Сделал, как вы и сказали, а мне выдало ошибку
Код AS3:

Main.as, строка 96        1120: Обращение несуществующего свойства timeLine.


3p.station 25.09.2011 19:22

эм
я русский такой плохо понимать, юзаю английский ИДЕ.
а какая версия greensock используется ? проверте есть ли метод append у timeLine...

Psycho Tiger 25.09.2011 19:32

Да, append пререгатива Max`а.

3p.station 25.09.2011 20:19

Цитата:

TimelineLite is a lightweight, intuitive timeline class for building and managing sequences of TweenLite, TweenMax, TimelineLite, and/or TimelineMax instances. You can think of a TimelineLite instance like a virtual MovieClip timeline or a container where you place tweens (or other timelines) over the course of time. You can:
build sequences easily by adding tweens with the append(), prepend(), insert(), appendMultiple(), prependMultiple(), and insertMultiple() methods. Tweens can overlap as much as you want and you have complete control over where they get placed on the timeline.
та вроде есть, та и я вот смотрю в проекте - у меня работает...

Psycho Tiger 25.09.2011 20:36

А, речь про TimelineLite. Я о TweenLite думал )

3p.station 25.09.2011 21:07

топикстартер возможно тоже не заметил...

nOobCrafter 25.09.2011 22:10

есть такой замечательное св-во delay которое задает задержку перед выполнением анимации:
Цитата:

delay : Number – Number of seconds (or frames if useFrames is true) that should elapse before the tween begins.
Код AS3:

TweenLite.to(mc, 1, { alpha : 1, delay : i * 0.5 });



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

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