|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
нейм здесь вообще не при чём, ещё раз
label - это текст, который пишется в кнопке, т.е. появляется посередине кнопки. мы свитчим по нему только потому, что это удобно читать. это не "обозначение кнопки", а "то, что написано в кнопке". Спрайты как правило свитчатся по ссылкам.
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
|
например у меня 2 слушателя:
textField1.addEventListener(MouseEvent.CLICK, clickListener); textField2.addEventListener(MouseEvent.CLICK, clickListener); гдe textField1 и textField2 - объекты типа Textfield private function clickListener(e:MouseEvent){ if (e.target == textField1){ trace ("нажали на textField1"); } if(e.target == textField2) { trace ("нажали на textField2"); } } ведь trace (e.target) выдавало мне instance6 (не равно textField1), хотя условие e.target==textField1 выполняется, поэтому я спрашивал какое свойство объекта вернёт textField1, но все сказали, что НЕТ СМЫСЛА ПОЛУЧАТЬ ЭТО ЗНАЧЕНИЕ т.к. это имя переменной и видимо нет такого свойства вообще... теперь Вы говорите СПРАЙТЫ КАК ПРАВИЛО СВИТЧАТСЯ ПО ССЫЛКАМ... что такое ссылка тогда не понимаю, это не имя переменной? :\\ |
|
|||||
Именно имя переменной.
private function clickListener(e:MouseEvent){ switch(e.currentTarget) { case textField1: trace("Tf1"); break; case textField2: trace("Tf2"); break; ... } } То, что вы трейсите экземпляры классов - это не выведет имя объекта, это выведет имя класса. Что делает функция trace()? У всего, шо она выводит она вызывает метод toString().
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 19.09.2015 в 10:51. |
|
|||||
Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
|
а если у меня в массиве - спрайты, то их отличать по свойству .name?
|
|
|||||
Если у вас спрайты одного типа/интерфейса/экземпляры одного класса, то смысла в свитче вообще нет.
Напрямую вызывайте у него его методы/меняйте свойства через (e.currentTarget as Sprite) А если в массиве совершенно разные объекты - то это неправильно.
__________________
There is no thing in this world that is not simple. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
Цитата:
Сложные типы передаются по ссылке. В чем разница: // примитивный тип var a:int = 2; var b:int = a; // записали значение a = 4; trace(b); // 2 // имеем два значения, которые никак не связаны между собой // сложный тип var a:Object = { x: 2 }; var b:Object = a; // "скопировали" ссылку. a.x = 4; trace(b.x); // 4 // имеем один объект, и два указателя (две ссылки) на этот объект. // т.е. грубо говоря, если мы будем менять переменную a, то будет меняться и b, // т.к. они представляют один и тот же объект. Последний раз редактировалось udaaff; 19.09.2015 в 11:24. |
|
|||||
Цитата:
Можно просто сделать так: if (e.target is Sprite) { var sprite:Sprite = e.target as Sprite; trace("вот этот негодяй спровоцировал всю заварушку:", sprite); // ;) } что-то типа: Но с if смотрится лучше Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот так один плохой совет приводит к жуткой неразберихе.
.label и .name совершенно разные по смыслу свойства. Лейбл это метка, отображаемая на контролах (элементах интерфейса — кнопках, радио-буттонах, чекбоксах и т.п.), предназначенная для пользователя, чтобы он знал, что за кнопка перед ним нарисована, что она будет делать. Совет использовать лейбл для опознания кнопки в коде — плохой, потому что во-первых лейбл может быть не задан вообще, во-вторых лейбл может быть не текстом а иконкой, в-третьих, надпись на разных кнопках может быть одинаковой ("ок" например), и в-четвертых текст лейбла может меняться во время исполнения программы, в зависимости от контекста или в разных режимах. Свойство .name наследуется всеми объектами от суперкласса Object. Оно есть у ВСЕХ экземпляров всех классов. Но это просто переменная типа String (строка), которое опять же может быть не определено, может быть одинаковым и может меняться в процессе исполнения программы. Не рекомендуется пользоваться для идентификации ни тем, ни другим. Лейбл — просто вообще не для этого. Нейм можно юзать под свою ответственность. Но идеально будет организовать все так, чтобы не приходилось полагаться на переменчивые свойства объектов. Это все-равно как различать спрайты по ширине. Если у Вас "спрайты в массиве", то Вы должны понимать, зачем их туда запихнули. Массив предполагает упорядоченность, структуру, и предоставляет методы для работы именно с порядком. У всех элементов есть индексы, описывающие место элемента в структуре. Это не мешок картошки, а точная картотека ссылок. Единственная ситуация, когда требуется дополнительный напряг, это ситуация с определением индекса в массиве элемента, пославшего событие. То есть, ссылка на сам элемент у Вас есть (e.target), но его индекс Вы не знаете, а это нужно для обработки события по логике (допустим, в игре Пятнашки). Тогда лучший способ — завести у всех элементов дополнительные свойства. В случае пятнашек это .id, хранящее номер фишки (можно использовать .name) и два индекса — строка и колонка (вертикаль и горизонталь), которые будут меняться в процессе игры и хранить положение в массиве (то есть, имея ссылку на фишку, Вы сможете спросить у нее номер и положение в массиве/на поле).
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 10:08. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|