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

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

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

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
По умолчанию меню из массива неизвестного размера. Проблема с target

Всем привет это опять я.

Столкнулся тут с проблемой.
Делаю приложение для вконтакта. В приложении есть кнопочка "найти друга", по нажатию на которую появляется скроллирующийся список друзей пользователя, при нажатии на одного из друзей в специальном окошечке должен появлятся ID этого друга.
Делаю все следующим образом.

Выполняю запрос к api вконтакте GetFriends, на который мне приходит xml со списком id-шников друзей. Я этот xml сразу перевожу в массив friendsArray, после чего выполняю запрос GetProfiles(String(friendsArray)), на который мне приходит xml с их first_name, last_name и т.п. При загрузке я этот xml аналогично перевожу в массив и сортирую
Код AS3:
for(var u:int =0; u<e.xml..user.length(); u++) 
		{
		FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name);
		fioArray.push(String(FIOstr));
		}
fioArray.sort(Array.CASEINSENSITIVE);
Затем идет выстраивание меню. В библиотеке у меня есть мувик Friend, который является просто белым прямоугольником с рамочкой. Проверяя длинну поступившего мне от GetProfiles xml, я столько же раз добавляю на сцену мувик Friend, создаю в нем текстовое поле Friend_txt.
Потом создаю листенер внутри условного цикла for (addEventListener(MouseEvent.MOUSE_OVER, rectOver)). Сначала я этот листенер повесил на мувик Friend. И вроде бы все путем. Тогда создаем где-нить вначале var clip:Movie Clip, а потом в функции rectOver(e:MouseEvent) пишем clip = e.target as Movie Clip; и тогда все свойства мувика Friend передаются переменно clip. Тогда бы можно было бы в цикле for создать Friend'у свойство и присвоить ему значение, например, e.xml.user[i].uid, а потом взять его при нажатии. И все было бы хорошо...
Но не работало. И, оттрэйсив e.target я обнаружил, что на него реагирует не мой мувик Friend, а текстовое поле Friend_txt ... тогда я написал код ниже. В нем все работает - на наедение на определенный пункт меняется цвет, на сведении - меняется обратно... но вот только как вытащить пресловутый e.xml.user[i].uid, который мне так нужен?... Сбился с ног искать ответ на этот вопрос.. Вроде бы что-то близкое к тому, что мне надо связано с currentTarget, только я пока не понимаю,что это. Объясните кому не жалко? Хэлпы читал, только все ранво не очень понятно. Если бы можно было бы через этот target, который я ловлю, отслеживать и не только сам таргет (то есть в данном случае текстовое поле), но и мувик, в котором он находится (то есть мувик Friend)?

ниже привожу код всего этого, как он выглядит сейчас:



Код AS3:
for(var i:int =0; i<e.xml..user.length(); i++) 
	{
	var Friend_txt:TextField = new TextField();
	var fmt2:TextFormat = new TextFormat();
	     fmt2.size = 10
	     fmt2.font = "Verdana";
	     fmt2.indent = 10
	Friend_txt.defaultTextFormat = fmt2;
	Friend_txt.wordWrap = true;
	Friend_txt.selectable=false;
	Friend_txt.x=-0.5;
	Friend_txt.y=-0.5;
	Friend_txt.width = 248.7; 
	Friend_txt.height = 19;
	Friend_txt.text = e.xml.user[i].uid
 
	var rectangle = new Friend();
	forScroll.scrollMov.addChild(rectangle);
	rectangle.x= 0;
	rectangle.y= i*18;
	rectangle.addChild(Friend_txt);
 
 
	var Ob:Object = new Object;
	Ob.UID2= e.xml.user[i].uid
	Ob = Friend_txt
	Ob.text = String(fioArray[i]);
	Ob.background = true;
	Ob.border = true;
	Ob.borderColor = 0xCCCCCC;
	Ob.backgroundColor = 0xFFFFFF;
	Ob.textColor = 0x000000;
	Ob.selectable=false;
 
 
 
	varDif=forScroll.masker.height-forScroll.scrollMov.height;
        Ob.addEventListener(MouseEvent.MOUSE_OVER, rectOver);
	Ob.addEventListener(MouseEvent.MOUSE_OUT, rectOut);
	Ob.addEventListener(MouseEvent.CLICK, rectClik);
        }
 
 
						function rectClik(e:MouseEvent):void
							{
								clip = e.target as Object;
								toID.text= String(clip.UID2);
								forScroll.visible=false;
 
							}
 
						function rectOver(e:MouseEvent):void 
							{
 
 
								var fmt3:TextFormat = new TextFormat();
								fmt3.size = 11
								fmt3.font = "Verdana";
								fmt3.indent = 20
 
								clip = e.target as Object;
								clip.backgroundColor = 0xC0EFFF
								clip.textColor = 0x306591
								clip.setTextFormat(fmt3);
							}
						function rectOut(e:MouseEvent):void 
							{
 
								clip.backgroundColor = 0xFFFFFF;
								clip.textColor = 0x000000;
								clip.setTextFormat(fmt2);
							}

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
DisplayObjectContainer#mouseChildren в помощь.

Старый 06.01.2010, 04:41
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 3  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
огроменное спасибо udaaff!=) Это работает так, что лучше и не придумаешь!)

Тогда ещё вопрос... немного по другой теме. Но все-таки. может быть есть какой-то способ отсортировать xml по какому-нибудь элементу? А то, во-первых, это неудобно - переводить его в массив, потом сортировать, а во вторых столкнулся с одной проблемой. Список юзеров то я отсортировал во имени-фамилии
Код AS3:
for(var u:int =0; u<e.xml..user.length(); u++) 
		{
		FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name);
		fioArray.push(String(FIOstr));
		}
 
		fioArray.sort(Array.CASEINSENSITIVE);
только вот теперь когда я создаю мувико свойство и присваиваю ему значение IDшника юзера,
Код AS3:
rectangle.UID2= e.xml.user[i].uid
то получается, что id не соответствует фамилии. Можно было бы как-то впихнуть id в массив fioArray, только непонятно как, но было бы круче, если бы можно было бы сортировать xml по какому-нибудь элементу. Я что-то так и не нашел как это сделать.

Старый 06.01.2010, 12:19
gnus вне форума Посмотреть профиль Отправить личное сообщение для gnus Найти все сообщения от gnus
  № 4  
Ответить с цитированием
gnus

Регистрация: Feb 2008
Сообщений: 100
http://webdevotion.be/blog/2008/01/2...ist-using-e4x/
__________________
http://komimap.ru

Старый 06.01.2010, 15:07
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 5  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 385
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
по ходу это под flex

Добавлено через 6 часов 20 минут
я нашел простое решение. Это сделать fioArray многоуровневым массивом. В итоге получается

Код AS3:
for(var u:int =0; u<e.xml..user.length(); u++) 
   {
   FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name);
   fioArray.push([String(FIOstr), e.xml.user[u].uid]);
   }
 
fioArray.sort(Array.CASEINSENSITIVE);
таким образом

Код AS3:
rectangle.UID2= fioArray[i][0];
Friend_txt.text = fioArray[i][1];
всем спасибо за участие!


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

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

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


 


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


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