Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.09.2015, 10:17
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 21  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
нейм здесь вообще не при чём, ещё раз

label - это текст, который пишется в кнопке, т.е. появляется посередине кнопки.
мы свитчим по нему только потому, что это удобно читать. это не "обозначение кнопки", а "то, что написано в кнопке".
Спрайты как правило свитчатся по ссылкам.
__________________
There is no thing in this world that is not simple.

Старый 19.09.2015, 10:34
nelco вне форума Посмотреть профиль Отправить личное сообщение для nelco Найти все сообщения от nelco
  № 22  
Ответить с цитированием
nelco
 
Аватар для nelco

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Спрайты как правило свитчатся по ссылкам.
например у меня 2 слушателя:
Код AS3:
textField1.addEventListener(MouseEvent.CLICK, clickListener);
textField2.addEventListener(MouseEvent.CLICK, clickListener);

гдe textField1 и textField2 - объекты типа Textfield

Код AS3:
private function clickListener(e:MouseEvent){
 
if (e.target == textField1){
trace ("нажали на textField1");
}
if(e.target == textField2) {
trace ("нажали на textField2");
}
 
}
мой вопрос про instanceName в этой теме начинался с такой структуры...


ведь trace (e.target) выдавало мне instance6 (не равно textField1), хотя условие e.target==textField1 выполняется, поэтому я спрашивал какое свойство объекта вернёт textField1, но все сказали, что НЕТ СМЫСЛА ПОЛУЧАТЬ ЭТО ЗНАЧЕНИЕ т.к. это имя переменной и видимо нет такого свойства вообще... теперь Вы говорите СПРАЙТЫ КАК ПРАВИЛО СВИТЧАТСЯ ПО ССЫЛКАМ... что такое ссылка тогда не понимаю, это не имя переменной? :\\

Старый 19.09.2015, 10:38
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 23  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Именно имя переменной.

Код AS3:
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.
Старый 19.09.2015, 10:57
nelco вне форума Посмотреть профиль Отправить личное сообщение для nelco Найти все сообщения от nelco
  № 24  
Ответить с цитированием
nelco
 
Аватар для nelco

Регистрация: Jul 2013
Адрес: Каскелен
Сообщений: 86
а если у меня в массиве - спрайты, то их отличать по свойству .name?

Старый 19.09.2015, 11:02
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 25  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Если у вас спрайты одного типа/интерфейса/экземпляры одного класса, то смысла в свитче вообще нет.
Напрямую вызывайте у него его методы/меняйте свойства через (e.currentTarget as Sprite)
А если в массиве совершенно разные объекты - то это неправильно.
__________________
There is no thing in this world that is not simple.

Старый 19.09.2015, 11:13
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 26  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
что такое ссылка тогда не понимаю
Типы данных делятся на примитивные и сложные.
Цитата:
К примитивным типам данных относятся Boolean, int, Null, Number, String, uint и void. Классы ядра ActionScript также определяют следующие сложные типы данных: Object, Array, Date, Error, Function, RegExp, XML и XMLList. [link]
Примитивные типы передаются по значению.
Сложные типы передаются по ссылке.

В чем разница:
Код AS3:
// примитивный тип
var a:int = 2;
var b:int = a; // записали значение
a = 4;
trace(b); // 2
// имеем два значения, которые никак не связаны между собой
Код AS3:
// сложный тип
var a:Object = { x: 2 };
var b:Object = a; // "скопировали" ссылку.
a.x = 4;
trace(b.x); // 4
// имеем один объект, и два указателя (две ссылки) на этот объект. 
// т.е. грубо говоря, если мы будем менять переменную a, то будет меняться и b,
// т.к. они представляют один и тот же объект.


Последний раз редактировалось udaaff; 19.09.2015 в 11:24.
Старый 19.09.2015, 11:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 27  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Если у вас спрайты одного типа/интерфейса/экземпляры одного класса, то смысла в свитче вообще нет.
Да его там вообще в принципе нет, даже если в массиве лежат объекты разных типов
Можно просто сделать так:
Код AS3:
if (e.target is Sprite) {
   var sprite:Sprite = e.target as Sprite;
   trace("вот этот негодяй спровоцировал всю заварушку:", sprite); // ;)
}
Ну или уж если сделать свичем, то можно сделать свич на тип данных
что-то типа:
Код AS3:
switch ((e.target as Object).constructor) {
    case Sprite:
    // что-то там
    break;
}
Но с if смотрится лучше
Цитата:
То, что вы трейсите экземпляры классов - это не выведет имя объекта, это выведет имя класса.
Если быть точнее, то это выведет ровно то, что указано в методе toString(), а там может быть все, что угодно

Старый 19.09.2015, 11:42
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 28  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вот так один плохой совет приводит к жуткой неразберихе.
.label и .name совершенно разные по смыслу свойства. Лейбл это метка, отображаемая на контролах (элементах интерфейса — кнопках, радио-буттонах, чекбоксах и т.п.), предназначенная для пользователя, чтобы он знал, что за кнопка перед ним нарисована, что она будет делать. Совет использовать лейбл для опознания кнопки в коде — плохой, потому что во-первых лейбл может быть не задан вообще, во-вторых лейбл может быть не текстом а иконкой, в-третьих, надпись на разных кнопках может быть одинаковой ("ок" например), и в-четвертых текст лейбла может меняться во время исполнения программы, в зависимости от контекста или в разных режимах.
Свойство .name наследуется всеми объектами от суперкласса Object. Оно есть у ВСЕХ экземпляров всех классов. Но это просто переменная типа String (строка), которое опять же может быть не определено, может быть одинаковым и может меняться в процессе исполнения программы.
Не рекомендуется пользоваться для идентификации ни тем, ни другим. Лейбл — просто вообще не для этого. Нейм можно юзать под свою ответственность. Но идеально будет организовать все так, чтобы не приходилось полагаться на переменчивые свойства объектов. Это все-равно как различать спрайты по ширине.
Если у Вас "спрайты в массиве", то Вы должны понимать, зачем их туда запихнули. Массив предполагает упорядоченность, структуру, и предоставляет методы для работы именно с порядком. У всех элементов есть индексы, описывающие место элемента в структуре. Это не мешок картошки, а точная картотека ссылок. Единственная ситуация, когда требуется дополнительный напряг, это ситуация с определением индекса в массиве элемента, пославшего событие. То есть, ссылка на сам элемент у Вас есть (e.target), но его индекс Вы не знаете, а это нужно для обработки события по логике (допустим, в игре Пятнашки). Тогда лучший способ — завести у всех элементов дополнительные свойства. В случае пятнашек это .id, хранящее номер фишки (можно использовать .name) и два индекса — строка и колонка (вертикаль и горизонталь), которые будут меняться в процессе игры и хранить положение в массиве (то есть, имея ссылку на фишку, Вы сможете спросить у нее номер и положение в массиве/на поле).
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:08.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.