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

Михаил Свинцов 08.03.2012 19:22

Анимация исчезновения
 
мне нужно чтоб текст (nam) исчезал через каждые 0,01 секунды я набросал вот такой код:
Код AS3:

package p {
        import flash.display.*;
        import flash.utils.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class DrawName extends MovieClip {
                private var nam;
                private var cont:Sprite = new Sprite();
                private var timer;
                public function DrawName() {
                }
 
                public function drawNam(){
                        trace('Класс, анимирующий название модуля');
                        this.nam = new CreateButton('Кожа', 30, 0xff0000, "Times New Roman", true, false, 90, 60,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        this.cont.addChild(nam);
                        this.cont.alpha = 1;
                        addChild(cont);
                        this.timer = new Timer(100, 0);
                        this.timer.addEventListener(TimerEvent.TIMER, timerListener);
                        this.timer.start();
                }
                private function timerListener(e:TimerEvent) {
                        trace(this.cont.alpha);
                        this.cont.alpha -= 0.01;
                        addChild(cont);
                }
        }
}

Добавлено через 49 секунд
я с таймером еще не встречался поэтому сразу извините если где-то что-то глупо

TanaTiX 08.03.2012 19:46

А что не работает? Или это урок? Если так, то слабенький вышел, но все равно похвально.
По сабжу. Во-первых 0,01 секунда - это 10 мс, а не 100, как у вас. Но выставлять такие маленькие таймеры, на сколько помню, даже адоб не рекомендует. Таймер вечен, а должен останавливаться.
Еще не понятно что такое CreateButton. Ну и название класса не совсем вяжется с его потенциальными возможностями.

MikroAcse 08.03.2012 20:09

Немного поправлю:
Код AS3:

package p {
        import flash.display.*;
        import flash.utils.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class DrawName extends MovieClip {
                private var nam;
                private var cont:Sprite = new Sprite();
                private var timer;
                public function DrawName() {
                }
 
                public function drawNam(){
                        this.nam = new CreateButton('Кожа', 30, 0xff0000, "Times New Roman", true, false, 90, 60,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        this.cont.addChild(nam);
                        this.cont.alpha = 1;
                        addChild(cont);
                        this.timer = new Timer(10, this.cont.alpha/0.01);
                        this.timer.addEventListener(TimerEvent.TIMER, timerListener);
                        this.timer.start();
                }
                private function timerListener(e:TimerEvent) {
                        this.cont.alpha -= 0.01;
                        addChild(cont);
                }
        }
}

Твин не должен быть вечен (в таких случаях).

Михаил Свинцов 08.03.2012 20:10

CraeateButton отвечает за создание кнопок(что чаще) и текста. И не надо ничего больше про это. Ограничение на таймер поставил ничего не появилось. И кстати пробовал и раз в секунду делать тож ничего. добавлял updateAfterEvent все равно ничего

Добавлено через 1 минуту
вот что сейчас у меня
Код AS3:

package p {
        import flash.display.*;
        import flash.utils.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class DrawName extends MovieClip {
                private var nam;
                private var cont:Sprite = new Sprite();
                private var timer;
                public function DrawName() {
                }
 
                public function drawNam(){
                        trace('Класс, анимирующий название модуля');
                        this.nam = new CreateButton('Кожа', 30, 0x000000, "Times New Roman", true, false, 90, 60,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        cont.addChild(nam);
                        cont.alpha = 1;
                        addChild(cont);
                        timer = new Timer(50, 0);
                        timer.addEventListener(TimerEvent.TIMER, timerListener);
                        timer.start();
                }
                public function timerListener(e:TimerEvent) {
                        if(cont.alpha > 0) {
                                cont.alpha -= 0.01;
                                e.updateAfterEvent();
                        } else {
                                timer.stop();
                        }
                }
        }
}


MikroAcse 08.03.2012 20:13

Лучше делать как я сказал, так и затрат на if/else будет меньше.

Михаил Свинцов 08.03.2012 20:14

ок щас попробую

MikroAcse 08.03.2012 20:14

Ты имел ввиду, что у тебя не работает?
Должно работать.

Михаил Свинцов 08.03.2012 20:15

ничего...(((

Добавлено через 56 секунд
у меня ничего не появляется хотя надпись изначально созданная сначала должна появиться а потом плавно исчезнуть

MikroAcse 08.03.2012 20:19

Попробуй так:
Код AS3:

package p {
        import flash.display.*;
        import flash.utils.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class DrawName extends MovieClip {
                private var nam:CreateButton;
                private var cont:Sprite = new Sprite();
                private var timer:Timer;
                public function DrawName() {
                }
 
                public function drawNam(){
                        this.nam = new CreateButton('Кожа', 30, 0xff0000, "Times New Roman", true, false, 90, 60,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        this.cont.addChild(nam);
                        this.cont.alpha = 1;
                        addChild(cont);
                        this.timer = new Timer(100, this.cont.alpha/0.05);
                        this.timer.addEventListener(TimerEvent.TIMER, timerListener);
                        this.timer.start();
                }
                private function timerListener(e:TimerEvent) {
                        this.cont.alpha -= 0.05;
                        addChild(cont);
                }
        }
}

Если ничего, то попробуй вместо строчки:
Код AS3:

addChild(cont);

Написать:
Код AS3:

setChildIndex(cont, numChildren-1);


Михаил Свинцов 08.03.2012 20:19

а может через setInterval как нибудь попробовать

Добавлено через 2 минуты
после добавления сетчилдиндекс выскочила ошибка RangeError: Error #2006: The supplied index is out of bounds.

Добавлено через 5 минут
вот после всех изменений
Код AS3:

package p {
        import flash.display.*;
        import flash.utils.*;
        import flash.net.*;
        import flash.events.*;
        import flash.text.*;
        import flash.display.Sprite;
        import flash.display.DisplayObjectContainer;
 
        public class DrawName extends MovieClip {
                private var nam;
                private var cont:Sprite = new Sprite();
                private var timer;
                public function DrawName() {
                }
 
                public function drawNam(){
                        this.nam = new CreateButton('Кожа', 30, 0xff0000, "Times New Roman", true, false, 90, 60,
                                                                          100, 100, TextFieldAutoSize.CENTER,
                                                                          TextFormatAlign.CENTER, false, null, false, null,
                                                                          false, null);
                        this.cont.addChild(nam);
                        this.cont.alpha = 1;
                        addChild(cont);
                        this.timer = new Timer(100, this.cont.alpha/0.05);
                        this.timer.addEventListener(TimerEvent.TIMER, timerListener);
                        this.timer.start();
                }
                private function timerListener(e:TimerEvent) {
                        this.cont.alpha -= 0.05;
                        addChild(cont);
                }
        }
}



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

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