Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.04.2007, 01:35
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 11  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
__etc:
В том то вся и фишка, что номер интервала каждый раз меняется.
Ну, вот чего наворотил. Страшно, конечно, но, вроде как работает...
Код:
var intervalWatcher:Function = function (obj, itr2clear) {
	trace("watcher called "+obj._width);
	if (obj._width == 0) {
		clearInterval(itr2clear);
		clearInterval(++itr2clear);
		trace("Interval "+itr2clear+" cleared");
	}
	return itr2clear;
};
Object.prototype.setInterval1 = function(o:Object, f:Function, t:Number) {
	var i = ASnative(250, 0)(f, t);
	ASnative(250, 0)(intervalWatcher, t, o, i);
	return i;
};
Object.prototype.setInterval = function() {
	if (typeof (arguments[0] == "function")) {
		setInterval1(this, arguments[0], arguments[1]);
	}
};
b_mc.onPress = function() {
	_root._mc.loadMovie("loaded.swf");
};
c_mc.onPress = function() {
	_root._mc.unloadMovie();
};
Только нужно придумать более универсальный способ проверки исчезновения объекта, который вызвал setInterval. Если вам прийдет в голову как - пожалуйста, не стесняйтесь =)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 27.04.2007 в 01:40.
Старый 27.04.2007, 01:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 12  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Что это? Зачем это? Зачем хаки? Чем не устроил _global? Зачем вообще интервал?

Старый 27.04.2007, 02:17
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 13  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
__etc:
а как узнать, что это тот же интервал? а не другой, но нужный, вызваный из того же места? и, в догонку, почему такая штука не работает?
Код:
var __obj:Object = new Object(_root._mc);
trace(__obj._width);
__obj.watch("_width", widthWathcer);
var widthWathcer:Function = function(){
	trace("widthWathcer");
}
__________________
Hell is the possibility of sanity

Старый 27.04.2007, 04:11
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 14  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
ну во-первых там 3 параметра должно быть, во-вторых, поменяйте местами объявление функции и watch или пишите
Код:
 function widthWathcer(p, o, n){
 trace( p + " " + o + " " + n);
 return n;
}
вместо var что-то = function(){}
а в третьих, геттер/сеттер на watch не поймаешь, и наконец на обжекте это сработает, при учете пп 1, 2 и 3. Достаточно п. 3

Совет прежний - передавай id интервала параметром функции.

Старый 27.04.2007, 04:31
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 15  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
третий параметр у watch не обязательный, а вот про геттер/сеттер не знал, спасибо.
Цитата:
Совет прежний - передавай id интервала параметром функции.
Да как же я его узнаю, если, теоретически, его может даже и не быть? Задача в том, чтобы убрать любые интервалы, когда объект, который их созал исчез. При этом, ни их количество, ни путь к объекту, который их создавал не известны.
Т.е. представим ситуацию:
существует банерная програма, она загружает в себя SWF, и после того, как выгружает, должна удалить все, что может быть с ним связано. SWF может содержать какие угодно setInterval'ы вызванные где угодно. Как их все удалить, когда он выгрузится?
__________________
Hell is the possibility of sanity

Старый 27.04.2007, 04:50
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 16  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Третий параметр надо вернуть, иначе свойство будет undefined. Так-то и первый необязательный, смысла только в этом мало.
Код:
prop = "test1";
trace( prop );
this.watch("prop", trace );
prop = "test2";
trace( prop );
this.watch("prop", function(){ trace ("ep, I watch it"); } );
prop = "test3";
trace( prop );
this.watch("prop", function(p,o,n){return n;} );
prop = "test4";
trace( prop );
this.watch("prop", function(){return "it's me";} );
prop = "test5";
trace( prop );
А интервалы.. Да сажай таймауты, и продлевай.
Ну или массив ссылок на таймауты в подгружаемом клипе, а убивая клип, вызываешь что-то вроде
Код:
while ( intToKill = inrArr.pop() ) clearInterval ( intToKill );


Последний раз редактировалось Kikasso; 27.04.2007 в 05:50.
Старый 27.04.2007, 06:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 17  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
эм... тут какое-то жестокое недопонимание =) Ну не могу я ничего сделать в подгружаемой флешке, я ее вообще не делал и не хочу. Мне готовую принесли =) А мне нужно после того, как она выгрузится из моей, поубивать все интервалы, которые она создала. Конечно. я могу попросить человека, который ее делал переписать что-то, чтобы мне было проще... но не хочется, чужая работа - все-тки деньги =)
__________________
Hell is the possibility of sanity

Старый 27.04.2007, 06:19
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 18  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Код:
_global.idsArray = [];
ASSetPropFlags(_global, [setInterval], 0, 7); //оказалось - не нужно
_global.oldI = _global.setInterval;
_global.setInterval = function(){
	trace(arguments);
	var i = oldI.apply( null, arguments);
	idsArray.push( i );
	return(i);
}
ASSetPropFlags(_global, ["setInterval", "oldI"], 7, 7);//можно и не делать
setInterval ( trace, 1000, "interval");
setInterval ( trace, 1100, "interval2");
function f(){
   trace ( arguments.join("") );
	}
setInterval(this, "f", 5000, "син", "так", "сис", "2" );
function xMan(){
	var i;
	while(  i = idsArray.pop() )clearInterval( i );
	trace ("мусорщик пришел и все смел");	
	}
var i1 = oldI( trace, 2000, "а это наш интервал, его пока не убиваем" );
var i2;
var temp = function(){
	clearInterval(i1);
	clearInterval(i2);
	trace ("ну и наших убъем");	
}
var i2 = oldI( temp, 10000 );
setInterval ( xMan, 5500 );
trace( idsArray );

PS> тоже хак, конечно, но поддерживает оба синтаксиса и переменное число аргументов userData. Enjoy, короче.


Последний раз редактировалось Kikasso; 27.04.2007 в 09:57.
Старый 27.04.2007, 10:18
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 19  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Цитата:
Сообщение от wvxvw
А мне нужно после того, как она выгрузится из моей, поубивать все интервалы, которые она создала.
Тоже самое не забудьте предусмотреть для листенеров.

Старый 27.04.2007, 13:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я не понимаю, чего машает:

Код:
clearInterval(_global.id)
_global.id = setInterval(…)
Ролик хоть обзапускайся.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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