|
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
проблемы e.target.name
Здравствуйте! Проблема в следующем: создал два экземпляра одного класса Btn
public class Main extends Sprite { var wakeUp:Btn; var goOut:Btn; public function Main():void { wakeUp = new Btn(); goOut = new Btn(); } function nameIt(obj:MovieClip, TEXT:String):void { ***//остальной код obj.addEventListener(MouseEvent.CLICK, CLICK); } function CLICK(e:MouseEvent):void { if(e.target.name == "wakeUp") { trace("1"); } else if(e.target.name == "goOut") { trace("2"); } } |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Имена переменных, в которые вы записываете ссылки на ваши кнопки, никак не связаны со свойством name.
ps: Капслоком принято именовать константы, а никак не функции. |
|
|||||
Видимо кнопка сложная и клик идёт по внутренней её части.
Попробуйте вместо e.target использовать e.currentTarget. Но он не нужен Потому что: Цитата:
Сделайте 2 слушателя - это не старая Java - здесь это не увеличит объемы байткода так драматически: function onWakeUpClick(event:MouseEvent):void { trace("1"); } function onGoOutClick(event:MouseEvent):void { trace("2"); } Цитата:
|
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Цитата:
Учту! |
|
|||||
Цитата:
Тут дело в том что это за кнопки И тут важны 2 случая: 1. Действие каждой кнопки уникально, т.е. кнопки делают разные вещи. Здесь их хоть 50 будет на экране - лучше создать 50 обработчиков Просто потому что с if-ами дело ничем хорошим не кончится. Если есть какие-то одинаковые куски кода - лучше вынести в другие функции и дёргать в обработчиках Разные действия - разные функции - тупая логика. Зачем здесь приделывать if-ы к тем же разным действиям? 2. Каждой кнопке сопоставлено какое-то значение Например, числовые кнопки в стандартном калькуляторе Windows (1,2,3,4,5,6,7,8,9,0) Конечно, нажатие на всё эти кнопки обрабатывается одинаково и нам важно получить только цифру Тогда да, делается 1(один) обработчик на 10 кнопок. Как он получает нужную цифру? Путей несколько: http://www.flasher.ru/forum/blog.php?b=239 И, заметьте, _большинство_ подходов к "передаче параметра" не поразумевают if-ы или свитчи. Т.е. обработчик просто берёт данные (в этом примере цифру) и делает с ними то, что нужно, не выясняя что за кнопка нажата. P.S. А с event.currentTarget при текущем состоянии кода заработало? |
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
import flash.events.MouseEvent; //Определяю событие MouseEvent: нажатие левой кнопки мыши. stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); //Определяю функцию с одним параметром. function mouseDown(event:MouseEvent):void { //Определяю локальную переменную с типом данных объекта Object: //Эта переменная будет иметь имя объекта, который был выбран. var so:Object = event.target.name; //Определяю оператор условия Switch: switch(so) { //Если нажата кнопка test1, то: case 'test1': trace("Кнопка test1 нажата!"); //Запрещаю дальнейшее выполнение этого условия: break; //Если нажата кнопка test2, то: case 'test2': trace("Кнопка test2 нажата!"); //Запрещаю дальнейшее выполнение этого условия: break; } } |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Спасибо всем за помощь! Буду пробовать!
|
|
|||||
Что-то тут много чего напостили, а самого простого и логичного варианта не предложили.
Если обработчик события и объявления кнопок находятся в одном классе, то можно так: |
|
|||||
Регистрация: Sep 2010
Сообщений: 81
|
Можно и варварским методом, присвоить явно.. ))
|
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Цитата:
Добавлено через 1 минуту Цитата:
Добавлено через 3 минуты Да, сработало! Спасибо) P.S. Кнопка и правда "сложная", может по этой причине... Добавлено через 8 минут expl, и еще хотел узнать, почему использовать в таком случае логику неправильно? То есть, какое преимущество дает свой собственный слушатель события? |
Часовой пояс GMT +4, время: 09:31. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|