Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   tween не останавливается (http://www.flasher.ru/forum/showthread.php?t=110203)

TanaTiX 29.03.2008 00:10

tween не останавливается
 
Сабж. Честно говоря проблема может оказаться и шире, но ИМХО корень злав моей сцене именно в неработающем .stop(); для твин-анимации.
Код выполняет слайд-шоу для 4х подгружаемых изображений.
Код:

import mx.transitions.*;
var my_mcl:MovieClipLoader = new MovieClipLoader();
var my_lst:Object = new Object();
my_mcl.addListener(my_lst);

speed = 2;//скорость изменения прозрачности
timer = 3000;//задержка перед сменой изображения
imageCount = 4;//количество подгружаемых картинок

// создание верхнего и нижнего мувика
_root.mc.createEmptyMovieClip("down",0);
_root.mc.createEmptyMovieClip("up",getNextHighestDepth());

//загрузка исходных картинок
_root.my_mcl.loadClip("1.jpg",_root.mc.down);
_root.my_mcl.loadClip("2.jpg",_root.mc.up);
_root.my_mcl.onLoadComplete = function() {
        _root.my_mcl.onLoadComplete = function() {
                //назначение прозрачности верхнему слою
                _root.mc.up._alpha = 0;
        };
        //задержка перед началом функции
        var time_pause = setTimeout(changeAlpha, timer);
};
//собственно функция
function changeAlpha() {
        //анимация альфы для верхнего изображения
        var tweenFirst = new Tween(_root.mc.up, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, speed, true);
        tweenFirst.onMotionFinished = function() {
                tweenFirst.stop();
                slider();
        };
}
function slider() {
        //проверка вхождения в цикл и назначение переменной
        //переменные отображают текущую верхнюю и нижнюю картинку
        if (!k) {
                k = 2;
        }
        if (k>imageCount) {
                k = 1;
        }
        n = k+1;
        if (n>imageCount) {
                n = 1;
        }
        _root.my_mcl.loadClip(k+".jpg",_root.mc.down);

        _root.my_lst.onLoadComplete = function() {
                _root.mc.up._alpha = 0;
                _root.my_mcl.loadClip(n+".jpg",_root.mc.up);

                _root.my_lst.onLoadComplete = function() {
                        //задержка перед анимацией
                        setTimeout(cycleAlpha,timer);
                        function cycleAlpha() {
                                var cycleTween = new Tween(_root.mc.up, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, speed, true);
                                cycleTween.onMotionFinished = function() {
                                        //проверка наличия tween-анимация до и после ее остановки
                                        trace("Aftre: "+cycleTween);
                                        cycleTween.stop();
                                        trace("Before: "+cycleTween);

                                        //увеличение переменной
                                        k++;
                                        //зацикливание функции
                                        slider();
                                };
                        }
                };
        };
}


Molecula 29.03.2008 00:22

Код:

tweenFirst.stop();
Это лишнее, Вы останавливаете то, что уже остановилось :D
И это так же:
Код:

cycleTween.stop();
Зачем Вы везде _root используете?

Про это вообще молчу.
Код:

_root.my_mcl.loadClip("1.jpg",_root.mc.down);
_root.my_mcl.loadClip("2.jpg",_root.mc.up);
_root.my_mcl.onLoadComplete = function() {
        _root.my_mcl.onLoadComplete = function() {
                //назначение прозрачности верхнему слою
                _root.mc.up._alpha = 0;
        };
        //задержка перед началом функции
        var time_pause = setTimeout(changeAlpha, timer);
};

У Вас код очень проблемный, так что корень зла в нём.
Создайте общую функцию загрузки с одним
Код:

MovieClipLoader
и событием
Код:

onLoadComplete

TanaTiX 29.03.2008 00:34

Дело в том, что если не остановить твин, то при повторном посещении страницы он наверняка наложится на новый. При этом можно будет наблюдать мигание всего и вся. Уже был такой печальный опыт :( В данном примере представлен лишь голый код вне целостного проекта.
А чем руты плохи?
Цитата:

Про это вообще молчу.
Создайте общую функцию загрузки с одним MovieClipLoader и событием onLoadComplete
честно говоря не представляю как это осуществить и как к этому подступиться... Сам по себе код работает, проблемы возникают при расположении его в основной документ (визуально также работающий без проблем)
Заранее спасибо за помощь.

Molecula 29.03.2008 01:10

Ну вроде такого:
Код:

import mx.utils.Delegate;
var mcl:MovieClipLoader = new MovieClipLoader();

this.onLoadInit = Delegate.create(this, Init);
mcl.addListener(this);

function Init(target:MovieClip) {
    if (a<b) {//условие какое-то, если надо;
        loadMc(path,mc);//ну, или другое что-то делаем;
    }
}

function loadMc(url:String, target:MovieClip) {
        mcl.loadClip(url,target);
}

Цитата:

А чем руты плохи?
А если эту флешку подгружать будем?

TanaTiX 29.03.2008 01:15

Molecula, сенкс, учту
...к сожалению это проблему пока не решает :(
ЗЫ. пока создаю с тем учетом, что ничто никуда подгружаться не будет...

Molecula 29.03.2008 01:20

Ок. Кстати, Вы не на то навешали:
Код:

_root.my_mcl.onLoadComplete = function() {
А надо на:
Код:

var my_lst:Object = new Object();

TanaTiX 29.03.2008 01:35

Это так что ли?
Код:

_root.my_lst.onLoadComplete=new Object(timeObj);
timeObj = setTimeout(cycleAlpha,timer);
function cycleAlpha() {...

...и тоже не решает проблему :(

Molecula 29.03.2008 03:36

Нет! Внимательней.
Код:

_root.my_mcl.onLoadComplete = function() {
my_mcl - это у Вас MovieClipLoader, а надо на объект вешать, т.е. на my_lst.
Вы же его объектом сделали:
Код:

var my_lst:Object = new Object();
Поэтому, та срашная конструкция и не работает.
Ведь Вы подписали так:
Код:

my_mcl.addListener(my_lst);
А my_lst не присвоили ивент.
Но, мне честоно говоря, страшно что будет, когда та махина заработает :D

TanaTiX 29.03.2008 04:02

Цитата:

Но, мне честоно говоря, страшно что будет, когда та махина заработает
после этой фразы и пробовать страшно...:confused:
...и вообще что-то я на ночь сильно запутался. Буду надеятся, что утром или все пойму или кто-то предложит не такое "страшное" решение;)


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

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