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

DCat 05.07.2006 03:47

Удаление функции
 
Помогите плиз... никак не пойму...
Аттачится мувик, поворачиватеся а потом через таймаут следующий и т.д.
Код:

setInterval(mySpark, 500);
i=1;
function mySpark() {
        attachMovie ("spark", "my", i, {_rotation : Math.floor(Math.random()*360), _x:200, _y:200});
        i++;
        if (i > 50) i=1;
}

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

Sneg 05.07.2006 09:21

Удалять нужно не функцию, а setInterval таким образом:
Код:

var intervalID:Number=setInterval(mySpark, 500);
i=1;
function mySpark() {
        attachMovie ("spark", "my", i, {_rotation : Math.floor(Math.random()*360), _x:200, _y:200});
        i++;
        if (i > 50) {
              i=1;
              clearInterval(intervalID)
            };
}


DCat 05.07.2006 10:42

А вот и нет...

Могу при необходимости приаттачить файл...
Если убить setInterval, то функции продолжают жить и мувики летят по одной и той же траектории... (это легко проверить... если поменять максимальное i, скажем на 3...

По задумке принцип следующий - по сетИнтервалу запускается функция mySpark с периодичностью 500мс... отработала -> прибиваем... иначе получается, что запускаются одновременно 3-4, а то и 6 мувиков... после начинается фантан мувиков... а их должно быть на промежутке ПолуСекунды 1 штука... Меняем интервал в меньшую сторону, и мувики появляются быстрей.

Мне нужно прибить отработавшую функцию... как это сделать? =/

motor4ik 05.07.2006 10:45

не понятно ничего, все должно правильно рботать. каждые пол секунды должны приатачиватся мувики, при достижении 50 они просто начнут заменятся на одинаковых глубинах вот и все! а че имя одинаковое у всех??

Sneg 05.07.2006 12:37

Код:

var i:Number=1;
var intervalID:Number=setInterval(mySpark, 500);

function mySpark() {
        var spark:MovieClip=_root.attachMovie ("spark", "my"+i, i);
        spark._rotation=Math.floor(Math.random()*360);
        spark._x=200;
        spark._y=200;
        i++;
        if (i > 50) {
        i=1;
        clearInterval(intervalID)
    };
}

Все работает. Ничего прибивать не нужно.

CorC 05.07.2006 12:55

я дык не заморачиваюсь при таких ситуациях
у вас идентификатор setInterval одинаковый: intervalID
потому он кое где удаляется а кое где нет
я просто идентификаторы с разными именами создаю и все _root["intID"+i] хотя б так, зато потом отлавливать проще если что не так

Sneg 05.07.2006 13:38

Так он же один раз запускает setInterval, для чего ему несколько? Удалится нужный в данном конкретном случае.

DCat 05.07.2006 15:38

Цитата:

Сообщение от Sneg
Все работает. Ничего прибивать не нужно.

Покажите плиз рабочий вариант =)
Честное слово, хочется посмотреть как ваш код работает у вас...
Потому что у меня он работает вот так: http://dcat.ru/temp/ogni.html

а мой код работает вот так: http://dcat.ru/temp/ogni_fine.html

DCat 05.07.2006 15:55

CorC Здесь один setInterval, как правило уже подметил Sneg... и он работает правильно... регулярностью 2 сообщения в секунду отписывает Трэйсы...

А для Интервалов использую ID и его чистку через функцию, которая вызывается... это позволяет сделать один уникальный таймер для всего и наплодить его везде, где это необходимо. а время удобнее выставлять локальной переменной для каждого конкретного таймера... Можно целый спектакль разиграть с таймером...

Но Проблема Остается актуальной...
В промежуток времени жизни Функции 1 запускается Функции 2... Функция 1 завершает действия и исчезает... по таймауту запускается Функция 3, и т.д. и т.д.
Т.е. если я задал например вызов функции раз в 2 секунды, значит в течение 2х секунд с момента запуска должна существовать только одна функция... по завершению действия должна автоматически ликвидироваться... и в любой момент выполнения программы с момента запуска функции и до момента следующего таймаута должна существовать только ОДНА функция...
если я задаю 50 мс то функции появляются с периодичностью 50 мс, складываясь стопочкой, и удаляться по завершению...
в моем случае это появление лучей... таймаут 500мс... это значит что в течение 1 секунды на экране не может быть более 2 лучей...

...но их количество, если вы посмотрите в примере растет... это непорядок... как поборот?

iNils 05.07.2006 16:14

Цитата:

Сообщение от DCat
В промежуток времени жизни Функции 1 запускается Функции 2...

А сколько времени живет ваша функция? :)


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

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