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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.03.2015, 02:00
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 1  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Слушатель для объектов с разными именем

Возник такой вопрос. Есть массив такого вида
Код AS3:
arr = [{"id":1, "val":2}, {"id":2, "val":5}];
Далее я гененирую по идишникам экземпляры класса

Код AS3:
for (i = 0; i < arr.length; i++)
			{
			TS = new TestClass(arr[i]['id'] , this);
			TS.x = 500 + 50 * i;
			TS.y = 365;
			TS.name = arr[i]['id'],[i]['val'];
			addChild(TS);
			TS.addEventListener(MouseEvent.CLICK, dimObject);
			}
 
private function dimObject(event:MouseEvent):void 
		{
	trace(TS.name);
}
Создается две картинки. Суть такова. Мне надо определить номер id объекта на который кликнули и его val. Попробовал таким способом, но отображает только ид последнего созданного объекта, на какой-бы из двух объектов не щелкнули. Подскажите решение.

Старый 11.03.2015, 02:04
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 2  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Я бы просто в самой картинке ввёл бы переменную, которая содержит её id

Старый 11.03.2015, 02:10
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 3  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Но все равно, как тогда прикрутить слушатель к 300 таким картинкам?) Суть в том, что у меня судя по всему слушатель прикручивается только к последнему объекту или к обоим, но trace регаирует только на последний.

Старый 11.03.2015, 02:24
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 4  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
я честно говоря не особо разбираюсь в таком создании массивов
Код AS3:
TS = new TestClass(arr[i]['id'] , this);
TS.name = arr[i]['id'],[i]['val'];
эти строчки для меня остаются пока загадкой
Но я подобную проблему решал, тем, что слушатель вешал к функции внутри объекта
грубо говоря dimObject должна находиться в расширенном классе вашей картинки

Старый 11.03.2015, 02:30
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 5  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
TS.name = arr[i]['id'],[i]['val'];
Это просто пока единственный для меня способ, присвоить имени TS id и val экземпляру TS) Я просто решил избежать возможности создания большого количества слушателей и функций. Картинок может быть даже не 10, а сотни. Для каждой создавать слушатель и свою функцию это слишком ресурсозатратно. Нужен способ попроще и эффективнее. Суть массива такого в том, что мы имеем для каждого объекта свои параметры, в моем случае это id и val. По сути, мне надо по клику на картинку, получить как раз значения параметров которые ей принадлежат. Но пока безуспешно)

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

Регистрация: Apr 2009
Сообщений: 409
Решение задачи в упрощенном виде, подход не однозначный.
Код AS3:
for (var i:int=0;i<10;i++){
var item:MovieClip=new MovieClip();
item.id=i;
addChild(item);
item.addEventListener('click', clickHandler);
}
function clickHandler(e:Event){
trace((e.target as MovieClip).id);
}

Старый 11.03.2015, 02:33
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 7  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
ну тогда слушатель определяет координаты клика, а дальше запускается цикл всех объектов и проверяется, попадает ли кто в эти координаты

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

Регистрация: Apr 2009
Сообщений: 409
Цитата:
Сообщение от Godwarlock Посмотреть сообщение
TS.name = arr[i]['id'],[i]['val'];
Это просто пока единственный для меня способ, присвоить имени TS id и val экземпляру TS) Я просто решил избежать возможности создания большого количества слушателей и функций. Картинок может быть даже не 10, а сотни. Для каждой создавать слушатель и свою функцию это слишком ресурсозатратно. Нужен способ попроще и эффективнее. Суть массива такого в том, что мы имеем для каждого объекта свои параметры, в моем случае это id и val. По сути, мне надо по клику на картинку, получить как раз значения параметров которые ей принадлежат. Но пока безуспешно)
Единсвтвенный способ - это слушать клик на каждую картинку. Другого и быть не может. Для успокоения можно поместить все картинки в общий контейнер, и добавить один слушатель на него. Но внутри все будет так же. Не думайте что это сильно грузит систему, на событиях построенно много чего и посерьезнее, главное не забывать удалять обработчики.

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

Регистрация: Jan 2006
Адрес: Москва (Нижний Новгород)
Сообщений: 229
Записей в блоге: 1
Отправить сообщение для KBAC с помощью Skype™
Одна из самых распространённых ошибок и непониманий вообще что и когда лежит в переменных и как вообще что работает.

То что лежит в TS (на что TS ссылается) определяется в цикле сейчас.

В слушателе должно быть что-то типа
Код AS3:
trace((event.target as TestClass).name)
__________________
Будь проще.

Старый 11.03.2015, 02:40
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 10  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
даж полегче придумал, прилепляем к мышке невидимый объект и когда "клик" запускаем функцию, которая каждую картинку hittest c невидимым

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

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

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


 


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


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