Страница 1 из 1
Отследить нажатый объект в массиве
Добавлено: 11 апр 2014, 23:59
MrDead
Есть массивы такого вида
massiv = [];
massiv_2 = [];
В массиве massiv 4 элемента одинакового вида объектов. [object mvc_l],[object mvc_l],[object mvc_l],[object mvc_l]
Суть в том, что мне надо отследить мышкой объект расположенный на сцене и запустить анимацию объекта из другого массива, который расположен вокруг каждого объекта object mvc_l
В данном случае имеет такой вид слушатель
Код: Выделить всё
addEventListener(MouseEvent.MOUSE_OVER, _sher);
Код: Выделить всё
private function _sher(event:MouseEvent):void { massiv_2[0].visible = true; tm_info.start(); }
Если наведем мышкой на любой объект из массива massiv, то анимация проигрывается massiv_2 с индексом 0. Вопрос в том, как мне отследить каждый объект и запускать анимацию элемента из массива massiv_2 соответствующее индексу массива massiv? Надо каждому объекту дать слушатель через цикл? Или как?))
Re: Отследить нажатый объект в массиве
Добавлено: 12 апр 2014, 00:22
XELAD
Добавить в класс mvc_l переменную, указывающую его индекс в массиве, к примеру
indexInArray
Во время составления massiv каждому mvc_l указать его индекс:
Код: Выделить всё
var mySmth = new Mvc_l(); //Предположительно у вас такmassiv.push(mySmth);mySmth.indexInArray = massiv.length - 1;
А в _sher прописать следующее:
Код: Выделить всё
massiv_2[event.target.indexInArray].visible = true;
Конечно, всё это будет работать, если не изменять массивы, иначе индексы будут указывать не на то, что нужно.
Есть и другие варианты...
Re: Отследить нажатый объект в массиве
Добавлено: 12 апр 2014, 00:44
MrDead
А какие варианты еще есть? В будущем элементы массива будут удаляться и заменяться.
Как самый крайний вариант, с излишком кода у меня есть такой, дать каждому объекту слушатель и запускать анимацию, типо так
Код: Выделить всё
massiv[0].addEventListener(MouseEvent.MOUSE_OVER, _sher);massiv[1].addEventListener(MouseEvent.MOUSE_OVER, _sher);massiv[2].addEventListener(MouseEvent.MOUSE_OVER, _sher);
и т.д. Можно было бы его как-то сократить
Re: Отследить нажатый объект в массиве
Добавлено: 12 апр 2014, 07:57
sasha^
попробуй так:
Код: Выделить всё
private function _sher(event:MouseEvent):void { massiv_2[massiv.indexOf(event.target)].visible = true; // суть в том что мы находим номер элемента в массиве при помощи его поиска // при маленьких массивах - норм, при большом - лучше вариант с номерами элементов... // если это мувики - то можно назначать числа так: mc.myNumber = 1; // все это из-за того что мувик - динамический класс tm_info.start(); }
Re: Отследить нажатый объект в массиве
Добавлено: 15 апр 2014, 15:39
MrDead
Код: Выделить всё
private function _shere_del(ev:TimerEvent):void { massiv_2[massiv.indexOf(ev.target)].visible = false; tm_info.stop(); }
Так-то вроде работает, но вот выше код вызывает ошибку. Суть в том, что после наведения мыши на объект, запускается таймер, по истечению которого, объект снова становится невидимым, но вот вызывает ошибку
[Fault] exception, information=TypeError: Error #1010: A term is undefined and has no properties.
Re: Отследить нажатый объект в массиве
Добавлено: 15 апр 2014, 22:02
sasha^
ошибка в том что
ev в обработчике таймера имеет тип TimerEvent и таймер не знает какой был видим...
потому создать переменную которая бы сохранила ссылку на объект и потом просто сделать невидимым...
Код: Выделить всё
private function _sher(event:MouseEvent):void { massiv_2[massiv.indexOf(event.target)].visible = true; gl = event.target; // суть в том что мы находим номер элемента в массиве при помощи его поиска // при маленьких массивах - норм, при большом - лучше вариант с номерами элементов... // если это мувики - то можно назначать числа так: mc.myNumber = 1; // все это из-за того что мувик - динамический класс tm_info.start(); }
Код: Выделить всё
private function _shere_del(ev:TimerEvent):void { gl.visible = false; tm_info.stop(); }
где
gl - глобальная переменная имеющая тип тот же что и объект на сцене
Re: Отследить нажатый объект в массиве
Добавлено: 16 апр 2014, 17:12
MrDead
Вроде работает, но с одним объектом. Если навести мышкой на несколько объектов, например после первого, на второй, то к первому варианту не применяется false, а применяется ко второму объекту, а предыдущий так и висит true
Re: Отследить нажатый объект в массиве
Добавлено: 16 апр 2014, 17:52
sasha^
тогда сделай массив состояний нажатия...