Форум 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)
-   -   Помогите разобраться: загрузка и проигрыш мувиков через случайные промежутки времени (http://www.flasher.ru/forum/showthread.php?t=111670)

drobinkin 05.05.2008 07:18

Помогите разобраться: загрузка и проигрыш мувиков через случайные промежутки времени
 
Вложений: 1
Люди добрые, помогите кто чем может. Третий день честно бьюсь — никак не осилю задачу. Сначала опишу что мне нужно.

Есть 4 внешних простых однотипных мувика длиной по 25(неважно) кадров каждый - tree1.swf...tree4.swf
Мне нужно выбирать случайным образом только один из них, загрузить его на сцену, проиграть до конца и выгрузить. После этого через случайный промежуток времени (в интервале примерно 1—5 сек) операция повторяется — выбираем случайно один мувик, грузим, играем, выгружаем — и так до бесконечности.
При этом есть еще кнопка, при наведении на которую приостанавливается воспроизведение загруженного мува. Убрали курсор — мув играет дальше до конца и т.д. Надеюсь, понятно изложил.

Поиском по форуму нашел кучу похожих примеров, но все они как-то вокруг да около, вобщем прикрутить под свои нужды так и не удалось :(

Итак, что имеем (код оставил только тот, что более-менее работает, остальное вычистил.)

В каждом из внешних мувов в последнем кадре прописал:
Код:

this.removeMovieClip();
чтобы клип сам выгружался по достижении конца — вроде работает.

Код:

//функция генерации случайных чисел — пример из хелпа
_global.randRange = function(min:Number, max:Number):Number  {
        var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
        return randomNum;
};

//собственно, основная функция
showTreez = function () {
        //генерим случ. номер от 1 до 4
        ti = _global.randRange(1, 4);
       
        //Здесь несущественно — предварительные вычисления всяких координат-размеров
        d = _global.randRange(-1, 1);
        if (d>=0) {
                di = 1;
        } else {
                di = -1;
        }
        //временно принудительно грузим только 4-й мув, для простоты
        ti = 4;
       
        //грузим собственно мув и он начинает играть
        this.createEmptyMovieClip("t_mc", 10);
        loadMovie("treez/tree"+ti+".swf", t_mc);
        t_mc._x = 360;
        t_mc._y = 158.7;
        t_mc._xscale = di*100;
};


//--------------Main code-------------------

//здесь для простоты пока взят постоянный интервал, хотя нужен случайный
setInterval(this, "showTreez", 3000);


//ну, и кнопка

bt.onRollOver = function() {
        t_mc.stop();
};

bt.onRollOut = function() {
        t_mc.play();
};

Собственно, вся фигня начинается сразу — после запуска функция живет своей жизнью, а мувики своей. Это я уже понял. Т.е. функция себе крутится внутри, грузит клипы и усе. В принципе, 2-3 секунд пока хватает, чтобы мувы грузились как бы по одному и проигрывались целиком. Если время в сетИнтервале уменьшить до 0,5-1 секунды, то видно, что клипы не доигрываются, а перегружаются новым экземпляром. И кнопка, естественно, работает не так, как надо — если навести мышь и подержать подольше, то видно что приостанавливается только загруженный на момент наведения мыши экземпляр, но функция продолжает крутиться, и через время перегружает его уже новым.

Также ни к чему не привела попытка подставить в сетИнетрвале что-то вроде
Код:

rndTime = _global.randRange(1, 3);
setInterval(this, "showTreez", rndTime);

Еще во внешних мувах прописал на всяк случай
Код:

в первом кадре _global.flag=false;
в последнем _global.flag = true;

но отловить его у меня тоже не получилось :(
Вобщем, совсем уже крыша едет. Подскажите, пожалуйста, что сделать, чтобы "со всей этой фигней взлететь?" :)
На всяк случай вот исходник с одним внешним мувом.
Вложение 19434

зы Обещаю, если все получится как надо - выложить тут ссылу на сайт, где эта красота будет крутиться :)

iNils 05.05.2008 08:01

Основная флешка, первый кадр
Код:

function init ():Void {
        setInterval (this, "load", случайное время);
}
function load ():Void {
        тут грузим случайный клип
}
init ();

Последний кадр каждой подгружаемой флешки
Код:

this._parent.init ();
this.removeMovieClip()


drobinkin 05.05.2008 08:09

О, спасибо, попробую :)
А когда и где генерить случайное время?

upd Вобщем, попробовал так:

Код:

_global.randRange = function(min:Number, max:Number):Number  {
        var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
        return randomNum;
};


function init ():Void {
        setInterval (this, "load", 5000);
}


function load ():Void {
        ti = _global.randRange(1, 4);
        d = _global.randRange(-1, 1);
        if (d>=0) {
                di = 1;
        } else {
                di = -1;
        }

        this.createEmptyMovieClip("t_mc", 10);
        loadMovie("treez/tree"+ti+".swf", t_mc);
        t_mc._x = 360;
        t_mc._y = 158.7;
        t_mc._xscale = di*100;
};




init();

bt.onRollOver = function() {
        t_mc.stop();
};

bt.onRollOut = function() {
        t_mc.play();
};

и так

Код:

function init ():Void {
        rndTime = _global.randRange(2, 5);
        setInterval (this, "load", rndTime*1000);
}

зрительно ничего не изменилось. По-прежнему, кто-то — то-ли лоад() то-ли инит() грузит сама по себе клипы, а те сами по себе играют и выгружаются. И кнопка также стопорит только первый загруженный на момент роловера :( Сдается где-то чего-то еще не хватает

iNils 05.05.2008 09:00

Был уверен, что писал setTimeout, а не setInterval. Ну ладно...
Поменяйте их.
setTimeout - вызывается метод один раз
setInterval - до тех пор, пока не остановить.

drobinkin 05.05.2008 09:27

Взял на себя смелость :)
Код:

function init ():Void {
        rndTime = _global.randRange(2, 5);
        _global.a=setInterval (this, "load", rndTime*1000);
}

а в последнем кадре клипа добавил

Код:

clearInterval(_global.a);
_parent.init ();
this.removeMovieClip();

Убрал this - это правильно?

Что я могу сказать — ура, клипы грузятся и работают как надо :) Спасибо большое
Кнопка вроде тоже заработала как надо


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

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