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

StudentPSTU 30.11.2008 03:50

Проблема: При многократных загрузках ролика таймер в нем сбивается
 
Такая ситуация: Главная флэшка загружает флэшку в которой есть таймер(заданный setInterval(..., 1000)). Когда первый раз загружаешь эту флэшку, таймер идет как надо. Но при повторых загрузках таймер с каждым разом идет все быстрее и быстрее.
Не могу понять в чем проблема.

scarbo 30.11.2008 04:54

привет,я тож с этим бился,месяца 2-3 назад.Проблему так мы тут и не решили.
Попробуй setTimeout,ну или тогда onEnterFrame.

iNils 30.11.2008 05:49

Допустим setInterval каждые 5 секунд вызывает некую функцию. Если загрузить 5 клипов последовательно через 1 секунду. То 5 setInterval будут суммарно вызывать эту функцию каждую секунду.
Для того чтобы это избежать, надо перед запуском setInterval проверять значение флага (флаг, это такая переменная, которая сигнализирует каком то состоянии). Допустим если он равен true, то запускать (и менять на false), false - нет.

StudentPSTU 30.11.2008 20:09

iNils, не совсем Вас понял. Решил не париться и написал черезе enterFrame.

iNils 30.11.2008 20:21

setInterval глобальная функция. Если перегружать в клип один тот ролик, то старый setInterval не убивается, а продолжает работать. В результате, у вас действует не один setInterval, а столько, сколько раз вы загружали ролик, только действуют они асинхронно.

StudentPSTU 19.12.2008 19:06

Ясно. Значит можно просто при выгрузке клипа удалить setInterval.

alecsisk 20.12.2008 10:24

Код AS1/AS2:

var flag:Boolean = false;
var my_interval:Number;
 
set_interval = function(value:Boolean, func:Function, timer:Number):Void {
        if (value == true && flag == false) {
                my_interval = setInterval(func, timer);
                flag = true;
        }
        if (value == false) {
                clearInterval(my_interval);
                flag = false;
        }
}
 
 
my_function = function():Void {
        trace("my_function");
}
 
set_interval(true, my_function, 1000);
set_interval(true, my_function, 1000);
set_interval(true, my_function, 1000);

возможно поможет


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

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