![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2009
Сообщений: 28
|
Есть два класса Main и Menu.
В Main созданю экзепляры класса Menu: for(var i:Number = 0; i<menuContent.length; i++){ var menuCont:Menu = new Menu(); menuCont.name = 'menu'+i; addChild(menuCont); } this.addEventListener(MouseEvent.MOUSE_DOWN, menuCome); this.addEventListener(MouseEvent.ROLL_OVER, onOver); this.addEventListener(MouseEvent.ROLL_OUT, onOut); public function menuCome(m:MouseEvent):void{ var myTarget:MovieClip = Main(root).getChildByName('menu1') as MovieClip; myTarget.x +=10;//работает trace(myTarget);// [object Menu] this.parent.removeChild(myTarget);//работает myTarget.removeEventListener(MouseEvent.ROLL_OVER, onOver);//не работает } Почему myTarget.removeEventListener(MouseEvent.ROLL_OVER, onOver); Работает только в том случае, если myTarget.name == 'menu1', то есть клип, в котором удаляю слушателя и клип, по которому кликаю один и тотже ? и как заставить его работать на любом экземпляре Menu ? |
|
|||||
|
Вероятно myTarget не имеет слушателя. Проверьте какой объект подписывается на событие.
что в данном случае является this. Из данного фрагмента кода получается, что this и myTarget не одно и тоже |
|
|||||
|
.
|
public function menuCome(event:MouseEvent):void { var menuItem:Menu = event.currentTarget as Menu; menuItem.x += 10 // должно работать trace(menuItem);// [object Menu] menuItem.removeEventListener(MouseEvent.ROLL_OVER, this.onOver);// стопицот должно работать // А вот такое Вы бросьте, неправильно это menuItem.parent.removeChild(menuItem);// но работает } |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 28
|
Да, да,. вот только что сам нашел))
this это получается просто инстанс класса. Сейчас я просто вынес функции onOver и onOut в public и добавил их при генерации меню: for(var i:Number = 0; i<menuContent.length; i++){ var menuCont:Menu = new Menu(); menuCont.name = 'menu'+i; menuCont.addEventListener(MouseEvent.MOUSE_UP, Menu.onOver); menuCont.addEventListener(MouseEvent.MOUSE_DOWN, Menu.onOut); addChild(menuCont); } Вот только теперь вопрос, так как я не совсем программист, скажите пожалуйста я правильно это делаю, или есть более "прямой" способ? |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 467
|
Не говоря об ошибках, может вам поможет:
upd: пока прочитал все, уже успели ответить. ![]()
__________________
Лучше быть умным и иногда делать глупости, чем глупым и постоянно умничать! |
|
|||||
|
Прямой способ есть. В данном виде, это походит на ночной кошмар. Но без полной картнины сказать ничего не возможно. Предпочтительнее в Menu сделать public метод, который будет добавлять элементы меню, навешивать на них слушателей и т.д. И соответсвенно метод который будет удалять.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 28
|
ну да, так теперь и сделал.
в Menu полностью генерирую меню, сразу при генерации раздаю слушателей, и в том числе тот слушатель, который удаляет (о котором был основной вопрос). То есть класс Menu, при вызове, теперь полностью организует работу всего моего меню. Всё правильно? |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 28
|
Всем большое спасибо)))
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|