Форум 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)
-   -   setTimeout не работает? (http://www.flasher.ru/forum/showthread.php?t=133441)

mj_nooker 05.12.2009 07:44

setTimeout не работает?
 
Циклом создаю несколько пронумерованных мувиков, которые выстраиваю в столбец.
В том-же цикле загружаю МКЛоадером туда картинки.
Нужно: чтоб загруженные картинки по очереди "появлялись" (Tween _alpha и _x).
Очерёдность реализую: setTimeout(showImgBox, delay)
Результат: не получается, картинки появляются одновременно (((

код:

Код AS1/AS2:

stop();
 
import mx.transitions.Tween;
import mx.transitions.easing.*;
 
var imgBox_X:Number = -10 //для стартового бокса с превью в polyPrvContainer_mc
var imgBox_Y:Number = 0; //для стартового бокса с превью в polyPrvContainer_mc
var shag_Y:Number = 10; //верт. отступ между картинками
var showImgBoxAlphaType = None.easeNone;
var showImgBoxType = Elastic.easeOut;
var showImgBoxAlphaTime = 0.2;
var showImgBoxTime = 0.4;
 
var imgListener:Object = new Object();
var imgLoader:MovieClipLoader = new MovieClipLoader();
 
                imgListener.onLoadStart = function(mc:MovieClip):Void
                {
                        mc._alpha = 0;
                        mc._x = 0;
                        mc._y= imgBox_Y;
 
                        imgBox_Y+=(46+shag_Y); //46 - высота картинки
                }
 
                imgListener.onLoadInit = function(mc:MovieClip):Void
                {
                        trace('imgListener:  центрирую картинку в '+mc._name);
                        mc._x = Math.round((mc._parent._width-mc._width)/2);
                        mc._y +=mc._x;  //прибавляем значение сдвига по Х, так как у нас картинка квадратная и верт.сдвиг=горизонт.
                        var nomer = mc._name.substr(9,1);
                        setTimeout(showImgBox(mc,nomer),nomer*1000);
                }
 
 
imgLoader.addListener(imgListener);
 
function showImgBox(mc:MovieClip, num:Number):Void
{
        varTarget = mc;
        varTarget['varTween'+num] = new Tween(mc, "_alpha", showImgBoxAlphaType, 0, 100, showImgBoxAlphaTime, true);
        moveTo_X=mc._x;
                //var showImgBoxTween:Tween = new Tween(mc, "_x", showImgBoxType, imgBox_X, moveTo_X,  showImgBoxTime, true);
}
 
var poly_xml:XML = new XML();
poly_xml.ignoreWhite = true;
var total_poly:Number;
 
poly_xml.onLoad = function(success):Void
{
        if (success)
        {
                total_poly = poly_xml.childNodes.length;
                        for (var i = 0; i<total_poly; i++)
                        {
                                var imgBox_mc:MovieClip = polyPrvContainer_mc.createEmptyMovieClip('imgBox_mc'+i, polyPrvContainer_mc.getNextHighestDepth());
 
                                var img_path:String = poly_xml.childNodes[i].childNodes[0].firstChild.nodeValue+'-but.jpg';
 
                                imgLoader.loadClip(img_path, imgBox_mc);
                        }
        } else
                        {
                                trace('Невозможно открыть XML');
                        }
}
 
poly_xml.load('xml/poly.xml');

Думаю, гвоздь где-то в физической очерёдности загрузки картинок: нет очерёдности, грузятся вразнобой, из-за этого сетТаймаут не работает.
Но тут ещё такая штука - когда выставляю, например, 20 000 мс якобы на появление каждой картинки - задержка в 20 сек полюбому должна быть заметна - но она незаметна, значит её нет или всё-таки нужно мудрить с очерёдностью?((

заранее премного благодарен!

udaaff 05.12.2009 10:53

В setTimeout() вы передаете не ссылку на функцию, а результат вызова функции, т.е. ничего.

mooncar 05.12.2009 10:55

А не хотите сначала загрузить все картинки в процессе загрузки ролика, а потом уже запускать очередь на их появление?

mj_nooker 08.12.2009 05:47

2udaaff: спасибо, действительно ссылка решает
2mooncar: ну, думал об этом, когда некоторое время назад создавал топик с вопросом похожим ;) на этот. просто почему-то кажется, что каждую картинку (даже если она всего 46х46 и 1.5К) прикольней загружать с хоть короткой, НО анимацией прелоадера (w2.0? :)). в данный момент наверное таки заморочусь и покумекаю над while циклом и поочерёдной загрузкой.

вот разобрался с таймаутом, но теперь в функции, которую он запускает не додумаюсь как ПРАВИЛЬНО объявить составную переменную (чтоб каждый вызов функции создавал новый "Tween"+num твин)
пробовал:
Код AS1/AS2:

varTarget['varTween'+num] = new Tween(mc, '_alpha', showImgBoxAlphaType, 0, 100, showImgBoxAlphaTime, true);
.

не получилось - картинки выезжают не по очереди, или даже может быть и по очереди - но их твины прерываются следующим объявлением такого-же твина (одна и та-же переменная)
пробовал:
Код AS1/AS2:

this['Tween'+num] = new Tween(mc, '_alpha', showImgBoxAlphaType, 0, 100, showImgBoxAlphaTime, true);
.

получилось вроде, но тогда нельзя типизировать эту переменную ((
А именно объявление переменных твинов нужны для того, чтоб типизировать и получить возможность повесить на последний из них onMotionFinished (в конце загрузки-появления последней превью-картинки хачю, чтоб появился скроллбар).
Плюнул и написал в функции просто создание твина:
Код AS1/AS2:

new Tween(mc, '_alpha', showImgBoxAlphaType, 0, 100, showImgBoxAlphaTime, true);
.

ну да, твин вроде последовательный (вследствии setTimeout и увеличивающегося интервала вызова функции с твином), но отлов загрузки последней превью пришлось реализовывать некультурным способом.

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


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

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