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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.09.2006, 00:24
bsuir.skif вне форума Посмотреть профиль Отправить личное сообщение для bsuir.skif Найти все сообщения от bsuir.skif
  № 1  
Ответить с цитированием
bsuir.skif

Регистрация: Apr 2006
Сообщений: 5
По умолчанию Как создать предопределенное событие для MovieClip

Как создать событие, доступное всем экземплярам
мувиклипа, наподобие прототипной функции?
У меня получается только так:
Код:
//**********************************************************
// имя_клипа.init_onStageBorder() - инициализирует
// листенер достижения границы сцены
MovieClip.prototype.init_onStageBorder = function() {
	ASBroadcaster.initialize(MovieClip);
	this.onEnterFrame = function() {
		if ((this._x+this._width)>=Stage.width) {
			MovieClip.broadcastMessage("onStageBorder");
		}
	};
	MovieClip.addListener(this);
};
// использование: 
// имя_клипа.init_onStageBorder();
// имя_клипа.onStageBorder = function() {}
//************************************************************
т.е. листенер приходиться создавать для каждого экземпляра
клипа, а хотелось бы, чтобы он был заранее определен для
всех клипов.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
var ASobj:Object = {};
AsBroadcaster.initialize(ASobj);
MovieClip.prototype.onPress = function() {
	_root.ASobj["_listeners"].push(this);
	this.startDrag(false, 0, 0, 600, 800);
	this.fx = this._x;
	this.fy = this._y;
};
MovieClip.prototype.onRelease = function() {
	if (Math.ceil(this._y/100) == Math.ceil(this.fy/100) && Math.ceil(this._x/100) == Math.ceil(this.fx/100)) {
		_root.ASobj.broadcastMessage("onSmallShift", this);
	}
	this.stopDrag();
};
MovieClip.prototype.onSmallShift = function(mc:MovieClip) {
	mc._y = mc.fy;
	mc._x = mc.fx;
};
Это не совсем то, что тебе нужно, но более иенее похоже...

ЗЫ. не ASBroadcaster, а AsBroadcaster
__________________
Hell is the possibility of sanity

Старый 29.09.2006, 12:35
bsuir.skif вне форума Посмотреть профиль Отправить личное сообщение для bsuir.skif Найти все сообщения от bsuir.skif
  № 3  
Ответить с цитированием
bsuir.skif

Регистрация: Apr 2006
Сообщений: 5
Решение найдено!
Спасибо wvxvw. Его конструкция натолкнула меня на мысль.
Мысль в следующем:

Код:
AsBroadcaster.initialize(MovieClip);
MovieClip.prototype.onEnterFrame = function(){
	if ((this._x+this._width)>=Stage.width) {
		MovieClip.addListener(this);// добавляем текущий клип в список листенеров
		MovieClip.broadcastMessage("onStageBorder");// отсылаем ему сообщение
		MovieClip.removeListener(this);// удаляем его из списка
		// иначе ему будут посылаться сообщения и от других клипов
	}
	if (this._x<=0) {
		MovieClip.addListener(this);
		MovieClip.broadcastMessage("onStageBorder");
		MovieClip.removeListener(this);
	}
	if ((this._y+this._height)>=Stage.height) {
		MovieClip.addListener(this);
		MovieClip.broadcastMessage("onStageBorder");
		MovieClip.removeListener(this);
	}
	if (this._y<=0) {
		MovieClip.addListener(this);
		MovieClip.broadcastMessage("onStageBorder");
		MovieClip.removeListener(this);
	}
};
использование:
имя_клипа.onStageBorder = function() {}
Таким же макаром можно создавать любые ивенты, доступные для всех
клипов сразу

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

Регистрация: Sep 2002
Сообщений: 30,787
Прототипы умерли три года назад.
Не лазьте в конструктор MovieClip, потом будет больно давать по рукам. Точнее просто не будет работать.

Старый 29.09.2006, 21:08
bsuir.skif вне форума Посмотреть профиль Отправить личное сообщение для bsuir.skif Найти все сообщения от bsuir.skif
  № 5  
Ответить с цитированием
bsuir.skif

Регистрация: Apr 2006
Сообщений: 5
Я уже заметил =)

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

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

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

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

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


 


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


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