PDA

Просмотр полной версии : Проблема с очисткой setInterval


scarbo
23.09.2008, 17:26
Большая просьба помочь,потому что я уже не могу найти этой проблеме объяснение.
Суть вот в чем:
Есть swf в которой используется для создания анимации setInterval(смена картинок,печатание текста,ну и всякого разного),эта swf грузится MovieClipLoader в главную swf.
и тут самое интересное.Нажимаем кнопочку,запускающюю дочернюю swf - все нормально.
Потом жмем другую кнопочку,запускающюю другую дочернюю swf,а потом опять 1 кнопочку,которая снова грузит swf с setInterval и пожалуйста,SetInterval запускается в 2 раза быстрее,и естесствено вся работа летит к чертям,если ещё разок запустить эту swf,то setInterval вызывается в 4 раза быстрее и т.д.
var SLAID = 5000
var Slaid = null;
////
Slaid = setInterval(slaid,SLAID)
/////
function slaid() {
page_mc.watch("brightness",zasvet,page_mc)
page_mc.vartween = new Tween(page_mc, "_x", Regular.easeOut,page_mc._x,page_mc._x-300, 1.2, true);
page_mc.vartween.onMotionFinished = function(){
page_mc.vartween1 = new Tween(page_mc,"brightness",Regular.easeOut,100,0,1.2,true)
}
if (page_mc._x+page_mc._width<300) {
page_mc.vartween.stop();
page_mc.vartween.continueTo(300,0.8);
}
}
,тут он внутри дочерней флешки не обгуляется,а вот обнуляется и все равно лажа:
var Start = 3000;
var perebor = null;
////////////
function perebork() {
clearInterval(perebor);
pereborka.vartween = new Tween(pereborka, "_xscale", Elastic.easeOut, 0, 100, 1.2, true);
pereborka._visible = true;
diman_txt.vartween2 = new Tween(diman_txt, "_width", Elastic.easeOut, 600, 300, 1.2, true);
mask_mc.vartween3 = new Tween(mask_mc, "_width", Elastic.easeOut, 600, 300, 1.2, true);
}
perebor = setInterval(perebork, Start);
если так то все равно:
var Start = 3000;
////////////
function perebork() {
clearInterval(perebor);
pereborka.vartween = new Tween(pereborka, "_xscale", Elastic.easeOut, 0, 100, 1.2, true);
pereborka._visible = true;
diman_txt.vartween2 = new Tween(diman_txt, "_width", Elastic.easeOut, 600, 300, 1.2, true);
mask_mc.vartween3 = new Tween(mask_mc, "_width", Elastic.easeOut, 600, 300, 1.2, true);
}
perebor = setInterval(perebork, Start);

Obi
23.09.2008, 18:01
А так?

function perebork() {
clearInterval(perebor);
pereborka.vartween = new Tween(pereborka, "_xscale", Elastic.easeOut, 0, 100, 1.2, true);
pereborka._visible = true;
diman_txt.vartween2 = new Tween(diman_txt, "_width", Elastic.easeOut, 600, 300, 1.2, true);
mask_mc.vartween3 = new Tween(mask_mc, "_width", Elastic.easeOut, 600, 300, 1.2, true);
perebor = setInterval(perebork, Start);
}

scarbo
23.09.2008, 18:20
Хм,а так ведь вообще функция не вызывается

Obi
23.09.2008, 18:41
Ну значит и clearInterval(perebor); у вас не вызывается.

scarbo
23.09.2008, 19:24
Obi Вы,в вашем примере засовываете вызов интервала в тело функции,то как она вызовется,я конечно могу написать perebork(),но тогда вообще какойто дергунчик начинается

Хорошо,тогда так.Вот пример во флешке под названием index жмем на черный прямоугольник,грузиться флешка txt,она проигралась,жмем ещё раз на черный прямоугольник,txt.swf проигрывается быстрее,можно ещё разочек нажать, - ещё быстрее

так,оказывается,эта проблема,не только в моих swf,я пробовал загружать и чужие swf,содержащие setInterval,(пример (http://demiart.ru/forum/index.php?act=Attach&type=post&id=81846))та же история,при повторном просмотре,частота увеличивается.Что это за баг такой?ъ



так и что же мне делать?
Я уже и так за этот вопрос пострадал,причем дважды.
Что-то этот setInterval не взлюбил меня

iNils
23.09.2008, 22:39
Пользователь scarbo, получает второй плюс за мультипостинг.

джонатан
24.09.2008, 18:08
Ё мое, что тут непонятного? Каждым жмяканьем кнопки ты создаешь еще один интервал, неудалив старый. Интервал то это ведь Number, так что и clearInterval удалит только последний созданный, а предыдущий останется работать. Т.е. если ты сделаешь:

var int1 = setInterval......
trace(int1) выведет 1
var int1 = setInterval......
trace(int1) ужу выведет выведет 2, и т.д...

darksranger
24.09.2008, 18:19
function perebork() {
clearInterval(perebor);
pereborka.vartween = new Tween(pereborka, "_xscale", Elastic.easeOut, 0, 100, 1.2, true);
pereborka._visible = true;
diman_txt.vartween2 = new Tween(diman_txt, "_width", Elastic.easeOut, 600, 300, 1.2, true);
mask_mc.vartween3 = new Tween(mask_mc, "_width", Elastic.easeOut, 600, 300, 1.2, true);
perebor = setInterval(perebork, Start);
}

джонатан
ппц вы читать умеете ?

у человека функция выглядет так:
clearInterval(perebor);
perebor = setInterval(perebork, Start);
clearInterval(perebor);
perebor = setInterval(perebork, Start);
тоесть перед созданием, удаляется предидущий интервал