Отследить нажатый объект в массиве

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Отследить нажатый объект в массиве

Сообщение MrDead » 11 апр 2014, 23:59

Есть массивы такого вида
massiv = [];
massiv_2 = [];

В массиве massiv 4 элемента одинакового вида объектов. [object mvc_l],[object mvc_l],[object mvc_l],[object mvc_l]

Суть в том, что мне надо отследить мышкой объект расположенный на сцене и запустить анимацию объекта из другого массива, который расположен вокруг каждого объекта object mvc_l
В данном случае имеет такой вид слушатель


  1. private function _sher(event:MouseEvent):void
  2.         {
  3.                 massiv_2[0].visible = true;
  4.                 tm_info.start();
  5.        
  6.         }


Если наведем мышкой на любой объект из массива massiv, то анимация проигрывается massiv_2 с индексом 0. Вопрос в том, как мне отследить каждый объект и запускать анимацию элемента из массива massiv_2 соответствующее индексу массива massiv? Надо каждому объекту дать слушатель через цикл? Или как?))
MrDead

 
Автор темы
Сообщения: 103
Зарегистрирован: 13 сен 2012, 00:46
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Отследить нажатый объект в массиве

Сообщение XELAD » 12 апр 2014, 00:22

Добавить в класс mvc_l переменную, указывающую его индекс в массиве, к примеру indexInArray

Во время составления massiv каждому mvc_l указать его индекс:
  1.  var mySmth = new Mvc_l(); //Предположительно у вас так
  2. massiv.push(mySmth);
  3. mySmth.indexInArray = massiv.length - 1;

А в _sher прописать следующее:


Конечно, всё это будет работать, если не изменять массивы, иначе индексы будут указывать не на то, что нужно.
Есть и другие варианты...
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Отследить нажатый объект в массиве

Сообщение MrDead » 12 апр 2014, 00:44

А какие варианты еще есть? В будущем элементы массива будут удаляться и заменяться.
Как самый крайний вариант, с излишком кода у меня есть такой, дать каждому объекту слушатель и запускать анимацию, типо так

  1. massiv[0].addEventListener(MouseEvent.MOUSE_OVER, _sher);
  2. massiv[1].addEventListener(MouseEvent.MOUSE_OVER, _sher);
  3. massiv[2].addEventListener(MouseEvent.MOUSE_OVER, _sher);


и т.д. Можно было бы его как-то сократить
MrDead

 
Автор темы
Сообщения: 103
Зарегистрирован: 13 сен 2012, 00:46
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.

Re: Отследить нажатый объект в массиве

Сообщение sasha^ » 12 апр 2014, 07:57

попробуй так:
  1. private function _sher(event:MouseEvent):void
  2.         {
  3.                 massiv_2[massiv.indexOf(event.target)].visible = true;
  4.                 // суть в том что мы находим номер элемента в массиве при помощи его поиска
  5.                 // при маленьких массивах - норм, при большом - лучше вариант с номерами элементов...
  6.                // если это мувики - то можно назначать числа так: mc.myNumber = 1;
  7.                 // все это из-за того что мувик - динамический класс
  8.                 tm_info.start();
  9.        
  10.         }
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Отследить нажатый объект в массиве

Сообщение MrDead » 15 апр 2014, 15:39

  1.     private function _shere_del(ev:TimerEvent):void
  2.         {
  3.            
  4.                 massiv_2[massiv.indexOf(ev.target)].visible = false;
  5.                 tm_info.stop();
  6.            
  7.         }
  8.  

Так-то вроде работает, но вот выше код вызывает ошибку. Суть в том, что после наведения мыши на объект, запускается таймер, по истечению которого, объект снова становится невидимым, но вот вызывает ошибку

[Fault] exception, information=TypeError: Error #1010: A term is undefined and has no properties.
MrDead

 
Автор темы
Сообщения: 103
Зарегистрирован: 13 сен 2012, 00:46
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.

Re: Отследить нажатый объект в массиве

Сообщение sasha^ » 15 апр 2014, 22:02

ошибка в том что ev в обработчике таймера имеет тип TimerEvent и таймер не знает какой был видим...
потому создать переменную которая бы сохранила ссылку на объект и потом просто сделать невидимым...
  1. private function _sher(event:MouseEvent):void
  2.         {
  3.                 massiv_2[massiv.indexOf(event.target)].visible = true;
  4.                 gl = event.target;
  5.                 // суть в том что мы находим номер элемента в массиве при помощи его поиска
  6.                 // при маленьких массивах - норм, при большом - лучше вариант с номерами элементов...
  7.                // если это мувики - то можно назначать числа так: mc.myNumber = 1;
  8.                 // все это из-за того что мувик - динамический класс
  9.                 tm_info.start();
  10.        
  11.         }

  1. private function _shere_del(ev:TimerEvent):void
  2.         {
  3.            
  4.                 gl.visible = false;
  5.                 tm_info.stop();
  6.            
  7.         }

где gl - глобальная переменная имеющая тип тот же что и объект на сцене
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Отследить нажатый объект в массиве

Сообщение MrDead » 16 апр 2014, 17:12

Вроде работает, но с одним объектом. Если навести мышкой на несколько объектов, например после первого, на второй, то к первому варианту не применяется false, а применяется ко второму объекту, а предыдущий так и висит true
MrDead

 
Автор темы
Сообщения: 103
Зарегистрирован: 13 сен 2012, 00:46
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.

Re: Отследить нажатый объект в массиве

Сообщение sasha^ » 16 апр 2014, 17:52

тогда сделай массив состояний нажатия...

За это сообщение автора sasha^ поблагодарил:
MrDead
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.


Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0