![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2006
Сообщений: 5
|
Как создать событие, доступное всем экземплярам
мувиклипа, наподобие прототипной функции? У меня получается только так: //**********************************************************
// имя_клипа.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() {}
//************************************************************
клипа, а хотелось бы, чтобы он был заранее определен для всех клипов. |
|
|||||
|
Modus ponens
|
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 |
|
|||||
|
Регистрация: 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() {} Таким же макаром можно создавать любые ивенты, доступные для всех клипов сразу |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Прототипы умерли три года назад.
Не лазьте в конструктор MovieClip, потом будет больно давать по рукам. Точнее просто не будет работать. |
|
|||||
|
Регистрация: Apr 2006
Сообщений: 5
|
Я уже заметил =)
|
|
|||||
|
Modus ponens
|
2 _etc:
Согласен, правильнее было бы сделать класс с набором нужных функций, но иногда, если задача простая, сфера применения заранее известна, а срок жизни "произведения" ограничен неделью-двумя максимум (тот же баннер), то, на мой взгляд нет смысла заморачиваться...
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|