Просмотр полной версии : Массив ссылок на объекты
Уже перелопатила несколько учебников и никак не могу понять, есть ли в АС возможность создать массив ссылок на объекты, например принадлежащие одному мувику? или массив кнопок (как в С++)?
Если нет, то как решается подобная проблема: есть достаточно большое количество однотипных объектов (например, кнопок), которые одинаково реагируют на одно и то же событие (например, движение мыши). Действия при наступлении события описываются в отдельной функции, а вот реакцию на это событие приходится описывать отдельно для каждого объекта. А если их сто?!
Пробовала делать через листенера, но ведь он не может определить, какой конкретно объект из списка вызвал событие. Или может? Если может, то как получить на него ссылку.
Заранее спасибо.
CCCPirate
16.08.2006, 18:01
создай свой класс
создай свой класс
А попроще никак? Т.е. массивов не бывает?
Zmet, используй EventDispatcher, там есть возможность определения объекта, отославшего событие.
Zmet, используй EventDispatcher, там есть возможность определения объекта, отославшего событие.
Спасибо. Пока не знаю, правда, что это такое. Пойду в справке поковыряюсь :)
Класс mx.events.EventDispatcher
http://livedocs.macromedia.com/flash/8/main/00003473.html
CCCPirate
16.08.2006, 18:34
объект может передавать свое _name, так же можно просмотреть все объекты внутри клипа: (for var name in clip) { trace (name) ...}
я не совсем понял в чем собственно задача? (что неообходимо реализовать?)
объект может передавать свое _name, так же можно просмотреть все объекты внутри клипа: (for var name in clip) { trace (name) ...}
я не совсем понял в чем собственно задача? (что неообходимо реализовать?)
Задача описана вначале, кажется довольно понятно :confused:
Есть сто разных картинок. При нажатии на любую картинку ее прозрачность становится равной 50. Как описать эти действия для всех картинок сразу.
Есть:
pict1.onSobytie=function(){
pict1._alpha=50;
}; //и так сто раз, для каждой картинки
Хочу:
pict[i].onSobytie=function(){
pict[i]._alpha=50;
};
//событие наступает только для одного объекта, но описывается сразу для всех
import mx.events.EventDispatcher;
EventDispatcher.initialize(container_mc);
for (var i in container_mc) {
var mc = MovieClip(container_mc[i]);
if (mc!=null) {
mc.onAnyEvent = function(event) {
this._alpha = 50;
trace(['Event receiver: '+this,'Event sender: '+event.target]);
}
container_mc.addEventListener("onAnyEvent",mc); // если используется EventDispatcher
}
}
container_mc.dispatchEvent({type:'onAnyEvent'});
Пример.
Да ладно, неужели сработает?! Попробую :)
Вот это посолидней! Ваяю. Результат скажу завтра :) Спасибо
Прискорбно. Ничего не получилось...
не удивительно, вы же не прочитали правил форума, вам предупреждение.
Juice_Green
21.08.2006, 11:58
2 __etc: если судить по задаче, то можно обойтись и без eventDispether'a, а просто использовать this в в функции обработчике.
не удивительно, вы же не прочитали правил форума, вам предупреждение.
Прочла. Какой из пунктов нарушен? Не пререкаюсь, просто не понимаю.
Спасибо всем. Один из вариантов решения проблемы нашла на RealTime. Если кому-то интересно, выкладываю кусочек кода:
for (var i in mc){
if(mc[i].getDepth){
mc[i].onPress=function(){
trace(this);
}}}
2 __etc: если судить по задаче, то можно обойтись и без eventDispether'a, а просто использовать this в в функции обработчике.
Можно. Но я привёл пример того, как сделал бы я.
var container_mc:MovieClip=this.createEmptyMovieClip("container_mc", this.getNextHighestDepth());
var clips:Array = new Array();
for (m=0; m<20; m++){
clips[m]=container_mc.createEmptyMovieClip("clips"+m, container_mc.getNextHighestDepth());
clips[m].lineStyle(1,0x000000,100);
clips[m].beginFill(0x000000, 100);
clips[m].moveTo(0,0);
clips[m].lineTo(10,0);
clips[m].lineTo(10,10);
clips[m].lineTo(0,10);
clips[m].lineTo(0,0);
clips[m].endFill();
clips[m]._x=20;
clips[m]._y=10+m*12;
clips[m].qwe="Это клип "+m;
}
container_mc._x=100;
import mx.events.EventDispatcher;
EventDispatcher.initialize(container_mc);
for (var i in container_mc) {
var mc = MovieClip(container_mc[i]);
if (mc!=null) {
mc.onPress = function(event) {
this._alpha = 50;
trace(['Event receiver: '+this,'Clip number: '+this.qwe]);
}
container_mc.addEventListener("onAnyEvent",mc); // если используется EventDispatcher
}
}
container_mc.dispatchEvent({type:'onAnyEvent'});
Вот так работает прекрасно. Мне тож статейка пригодилась:)
А вот двадцать раз clips[m] можно было и не писать. Мало того, что ухудшает читабельность, так ещё и тормозит.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.