PDA

Просмотр полной версии : Как удалять дубликат через некоторое время


Edeisys
16.07.2007, 20:56
Господа! И дамы.
Создаю дубликаты клипа и хочу, чтобы каждый созданный дубликат сам секунд через 5 удалялся. Что-то мы ни как с setInterval`ом не договоримся. Поможыте кто чем может :)
on (release) {
duplicateMovieClip(object, "object"+i, i);
setProperty("object"+i, _x, i*20);
setProperty("object"+i, _y, i*20);
this["object"+i].onEnterFrame = function() {
var intervalID = setInterval(remove_object(this), 5000);
function remove_object() {
removeMovieClip(this);
clearInterval(intervalID);
}
}
i++;
}
Вот так они чего-то не удаляются ни разу.

Gh >k
16.07.2007, 21:17
А не проще из самого клипа удалять, на N-ном кадре.
this.swapDepths(100000);
this.removeMovieClip();

Edeisys
16.07.2007, 21:37
А если у меня в клипе мало N-ых кадров?
Чё-то этот код не срабатывает.
Мувик удаляется сразу без задержки.
Может есть более хитрый путь?

Gh >k
16.07.2007, 21:45
Можно просто их создать!
Ну если непойдёт то можно подругому.
С функцией setInterval я пока еще не знаком, поэтому сделаю чуть чуть через Ж как говорится.
onEnterFrame = function():Void {
n++;
if (n>=sec) {
this.swapDepths(100000);
this.removeMovieClip();
}
}
sec - это время которое ты устанавливаешь.

Edeisys
16.07.2007, 21:59
Карочи ничё у меня не вышло, но за идею спасиба :)
В первом кадре исходного мувика объявил переменную var n:number = 0
Во втором стал проверять, и подростать if (n==10) {removeMovieClip(this);}
n++;
В третьем возвращаюсь ко второму кадру.
Пока такое у меня топорное решение, но работает.
Однако, хотелось бы всё же на будущее разобраться с этим злобным setInterval`ом и разными другими getTimer`ами. Чтобы было.

Wolsh
17.07.2007, 01:27
Ну дык... читаем книжки.
А через onEnterFrame у тебя не получилось потому что где-то в другом месте его же используешь. Всегда желательно конкретизировать, чей именно onEnterFrame. А способ этот я всегда использую, и для задержек в кадрах тоже, ибо интервалы плодить на всякую чепуху - боже упаси.

CorC
17.07.2007, 10:24
Однако, хотелось бы всё же на будущее разобраться с этим злобным setInterval`ом и разными другими getTimer`ами. Чтобы было.
Разберитесь, они жизнь облегчат.
И пора уже забывать про setProperty и on()

Kikasso
17.07.2007, 11:23
если 8-ка:
setTimeout( clip, 'removeMovieClip', 5000 );

Edeisys
17.07.2007, 19:38
А у меня написано, что "Flash Professional 8.0", но setTimeout не работает... почему-то.
Его может как-то специально подключать надо? Или это хитрожолтый глюк? Или это у меня не совсем восьмая версия?

Wolsh
17.07.2007, 19:42
Спокойно, с восьмеркой всё в порядке. Это личная разработка Kikasso :)

etc
17.07.2007, 19:56
_global.setTimeout( clip, 'removeMovieClip', 5000 );

Wolsh
17.07.2007, 20:07
похоже у __etc тоже такая штука есть во фреймворке.
Извините что я типа острю, просто она даже не подсвечивается, и в хелпе ни слова. Если не трудно, __etc, объясни что к чему с этим таймаутом.

etc
17.07.2007, 20:13
Это недокументированная (в восьмерке) глобальная функция. Чтобы флеш не ругался, надо писать вместе с _global.

Wolsh
17.07.2007, 21:13
блин, забыл с ручной глубины вынести :(
всё, работает. Круто, это многое облегчит.
Так любой метод можно применить?

etc
17.07.2007, 22:43
В принципе да.

Edeisys
17.07.2007, 22:51
Абалдзетьсь.
Блгдрю, жыть стало лучше :)

Kikasso
17.07.2007, 23:07
http://www.flasher.ru/forum/showthread.php?t=73336

Wolsh
18.07.2007, 21:55
Вот... всё здорово, а можно как-то параметр в вызываемую функцию передавать?

etc
18.07.2007, 22:40
Точно также, как и в setInterval.

Kikasso
18.07.2007, 22:59
Вот затычка для ранних версий:
if(!setTimeout){
_global.setTimeout = function(f,t){
if(typeof(t) == 'number'){
arguments.splice (0, 2);
var i=setInterval(function(args){ clearInterval(i); f.apply(null, args);}, t, arguments);
}else{
var o = f;
var s = t;
t = arguments[2];
arguments.splice (0, 3);
var i=setInterval(function(args){ clearInterval(i); o[s].apply(o, args);}, t, arguments);
}
return i;
}
}
if(!clearTimeout)_global.clearTimeout = clearInterval;

/// проверки ///////////
function f1(a){trace(a);}
function tsumm( a ){trace ('аргументы: ' + arguments); }
testInt = setTimeout( f1, 1000, 'я не буду вызван');
clearTimeout( testInt );
setTimeout( this,'f1', 1500, 'OK' );
setTimeout( tsumm, 2500, 'OK', 'OK', 'OK' );
setTimeout( this,'tsumm', 3000, '-------' ,"(OK)" ,'-----------------' );

etc
18.07.2007, 23:03
Затычка хорошая, но в целом не особо нужна в нынешнее время :)
Кстати, в той же восьмерке (хотя я смотрел в девятке, но в восьмерке должно работать) трейс clearInterval === clearTimeout выдаст true :)

Kikasso
19.07.2007, 00:33
Не пользы ради, а только лишь из спортивного интереса.. А про очистку это да, но оно и логично.