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

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

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
почему alatar решил заткнуть здравую мысль у iillyyaa
Что было здравого в той мысли? Если посмотреть предыдущий пост, то автор просил пример кода, AirDecade ему предоставил (именно такой как просил автор – простенький пример доступа к массиву в обработчике события).

Старый 03.09.2010, 00:04
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 22  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от alatar Посмотреть сообщение
Что было здравого в той мысли? Если посмотреть предыдущий пост, то автор просил пример кода, AirDecade ему предоставил (именно такой как просил автор – простенький пример доступа к массиву в обработчике события).
Подобный перебор элементов в самом начале цикла в контексте вопроса
Цитата:
-как мне передать arr[i] в playOver из этой функции когда происходит событие?
может заставить автора думать что перебор всех элементов - единственная возможность узнать, на каком объекте был клик (arr[i]).
Подобный вопрос должен был расставить точки над i, что это сделано только для примера. По меньшей мере невежливо затыкать людей только по причине того, что они образованы чуть менее, чем Вы.

Проблема описанная выше не высосана из пальца: я со своим опытом понял что "перебор дан для примера" только когда второй раз перечитал полностью тему. Хотя и сейчас я придерживаюсь прежнего мнения: не могу представить себе ситуацию, в которой ради демонстрации получения ссылки на массив её используют в одном месте - в условии цикла.

Старый 03.09.2010, 00:30
iillyyaa вне форума Посмотреть профиль Отправить личное сообщение для iillyyaa Найти все сообщения от iillyyaa
  № 23  
Ответить с цитированием
iillyyaa

Регистрация: Apr 2010
Сообщений: 147
AirDecade я чуть усложню пример, точнее он такой и есть, я код напишу... реализация на самом деле будет такой же.. от вас хотел бы исправления вашего кода

Код AS3:
function initButtons(arr:Array):void {
 
	for(var i:int = 0; i<arr.length; i++){
		arr[i].id = i;
		arr[i].buttonMode = true;
		arr[i].addEventListener(MouseEvent.MOUSE_OVER, playOver);
		arr[i].addEventListener(MouseEvent.MOUSE_OUT, playOut);
		arr[i].addEventListener(MouseEvent.CLICK, doClick);		
	}
	for(var i:int = 0; i<arr2.length; i++){
		arr2[i].id = i;
		arr2[i].buttonMode = true;
		arr2[i].addEventListener(MouseEvent.MOUSE_OVER, playOver);
		arr2[i].addEventListener(MouseEvent.MOUSE_OUT, playOut);
		arr2[i].addEventListener(MouseEvent.CLICK, doClick);		
	}
 
}
Цитата:
-как мне передать arr[i] в playOver из этой функции когда происходит событие?

-как получить целый массив при наведении курсора мыши на какой-либо объект этого массива? Например: если у меня в массиве кнопки, то когда я навожу курсор на любую из кнопок я получаю весь массив целиком?
я догадываюсь, у автора есть функция playOver

Код AS3:
function playOver(event:MouseEvent){
// что то сделать, что бы в переменной xxx было значение индекса к примеру (0 или 1 или 2 и т.д.)
trace(xxx);
//trace должен выдать число 0, 1, 2 или какой там индекс был у массива, где кликнули мышкой
}
как твой код может это реализовать ??? на выходе должно быть 0 или 1 или 2

Добавлено через 3 минуты
Psycho Tiger, я правильно понимаю, мы создаём какой то объект, в него засовываем ссылку, точнее ссылка является индексом, и запихиваем туда нужное нам значение..
из функции онклик, мы имея ссылку выдергиваем из массива hash по индексу равному ссылке значение ячейки ??

Старый 03.09.2010, 00:35
angry_beaver вне форума Посмотреть профиль Отправить личное сообщение для angry_beaver Найти все сообщения от angry_beaver
  № 24  
Ответить с цитированием
angry_beaver

Регистрация: Sep 2010
Сообщений: 6
Спасибо за ваши ответы!

Я уже который день сижу голову ломаю...я не создавал классов, пытался все сделать линейным программированием, а делаю я меню с выезжающим саб меню.

У меня есть МК(муви клип), в этом МК menu у меня 5 главных МК кнопок (BUT1, BUT2, BUT3, BUT4, BUT5) с анимацией, каждая главная кнопка имеет саб кнопки и я создал 5 МК (but1Sub, but2Sub, but3Sub, but4sub, but5sub). В butSub есть: саб кнопки МК со своей анимацией, и анимация как саб кнопки выпадают когда срабатывает событие для главной кнопки.

Создал массивы:

Код AS3:
var aButtons:Array = [home_btn, services_btn, ted_btn, knowCenter_btn, about_btn]; - главные кнопки
var aSubMenu:Array = [home_sub, services_sub, ted_sub, knowledge_sub, about_sub];- массив со всеми саб менюшками
 
var aHomeSub:Array = []; - массивы для саб кнопок
var aServicesSub:Array = [package_btn, component_btn, prodRel_btn, medical_btn, solar_btn];
var aTedSub:Array = [report_btn, video_btn, accessibility_btn];
var aKnowCenter:Array = [medical_btn, packageTest_btn, railroad_btn];
var aabout:Array = [qm_btn, news_btn, contact_btn, links_btn];//4*/
-
-
-
Идея была такая:
инициализирую главные кнопки aButtons[], при MOUSE_OVER вызываю функцию где главная кнопка делается нажатой, потом вызываю саб менюшку из aSubMenu[]. Из функции где я вызываю саб меню я хочу инициализировать саб кнопки передавая нужный массив в initButtons(arr); таким образом я использую одну и ту же функцию, и так я хочу сделать для всех функций.

Код AS3:
function initButtons(arr:Array):void {
 
	for(var i:int = 0; i<arr.length; i++){
		arr[i].id = i;
		arr[i].buttonMode = true;
		arr[i].addEventListener(MouseEvent.MOUSE_OVER, playOver);
		arr[i].addEventListener(MouseEvent.MOUSE_OUT, playOut);
		arr[i].addEventListener(MouseEvent.CLICK, doClick);
	}//for
}//initButtons
 
function playOver(event:MouseEvent):void{
 
	var currentBtn:int = event.currentTarget.id;
	trace("suka="+currentBtn); //:)
 
	event.target.gotoAndPlay("over");
	setSelectedBtn(currentBtn, aButtons); // если бы я мог получить массив с кнопкой из события, то было бы очень красиво.
	callSubMenu(currentBtn)
 
}//playOver
 
function setSelectedBtn(id:int, arr:Array){
 
	for(var i:int = 0; i<arr.length; i++){
	if(i == id){
		arr[i].gotoAndStop("down");
		arr[i].buttonMode = false;
		arr[i].removeEventListener(MouseEvent.MOUSE_OVER, playOver);
		arr[i].removeEventListener(MouseEvent.MOUSE_OVER, playSOver);
		arr[i].removeEventListener(MouseEvent.MOUSE_OUT, playOut);
		arr[i].removeEventListener(MouseEvent.CLICK, doClick);
 
		}//if
 
	else{
		if(arr[i].currentLabel == "down"){
			arr[i].gotoAndPlay("out");
			}//if
		arr[i].buttonMode = true;
		arr[i].addEventListener(MouseEvent.MOUSE_OVER, playOver);
		arr[i].addEventListener(MouseEvent.MOUSE_OVER, playSOver);
		arr[i].addEventListener(MouseEvent.MOUSE_OUT, playOut);
		arr[i].addEventListener(MouseEvent.CLICK, doClick);
 
		}//else			
 
	}//for
 
}//setSelectedBtn
 
function callSubMenu(id:int):void{
 
	for(var i:int = 0; i < aSubMenu.length; i++){
 
		if(id == i && id !=0)
                        {
			aSubMenu[i].gotoAndPlay("open");
			initSubMenuButtons(i);
			trace("sub open for "+aSubMenu[i]);
			}//if
 
		else {
			if(aSubMenu[i].currentLabel == "open")
                        {
			aSubMenu[i].gotoAndPlay("close");
			trace("sub closed for "+aSubMenu[i]);
			}//if
		}//else
	}//for
}//callSubMenu
 
function initSubMenuButtons( id:int ):void{
	trace("initSubMenuButtons for " + id);
 
	switch(id){		
		case 0:break;
		case 1:initButtons(aServicesSub);break;
		case 2:;break; //initButtons(aTedSub)
		case 3:;break; //initButtons(aKnowCenter)
		case 4:;break; //initButtons(aAbout)
		default:break;
	}//switch
 
}//initSubMenuButtons
 
------
MAIN
------
initButtons(aButtons);
В коде могут быть ошибки, т.к. я постоянно все переписываю. Вариант этот еще сырой. Моя задача сейчас инициализировать саб кнопки и как бы мне это все так сделать, чтобы каждая саб кнопка имела уникальный ID чтобы мне вызывать iFrame в html....
Вообщем жесть....не судите строго, я недавно только начал изучать AS3.
Знаю что все это можно организовать с классами, только я не понимаю как это реализовать в моем случае!

Спасибо огромное за вашу помощь!

Старый 03.09.2010, 00:38
iillyyaa вне форума Посмотреть профиль Отправить личное сообщение для iillyyaa Найти все сообщения от iillyyaa
  № 25  
Ответить с цитированием
iillyyaa

Регистрация: Apr 2010
Сообщений: 147
hash мы можем сделать многомерным массивом, и к примеру обратиться к нескольким данным которые мы передаём..
Код AS3:
hash[0][event.currentTarget]);
hash[1][event.currentTarget]);
hash[2][event.currentTarget]);
к примеру мы передаём 3 переменные.. а дальше мы можем выдернуть из 3 массивов нужные нам данные...

Добавлено через 31 секунду
всё верно ?

Старый 03.09.2010, 00:51
angry_beaver вне форума Посмотреть профиль Отправить личное сообщение для angry_beaver Найти все сообщения от angry_beaver
  № 26  
Ответить с цитированием
angry_beaver

Регистрация: Sep 2010
Сообщений: 6
Цитата:
а дальше мы можем выдернуть из 3 массивов нужные нам данные...
но у тебя один массив с тремя элементами и ты передаешь объект который вызвал событие в i-тый элемент массива, что ты пытаешься сказать этим?
Цитата:
а дальше мы можем выдернуть из 3 массивов нужные нам данные...

было бы здорово если бы работала такая штука:

Цитата:
var array:Array = new Aray();

array = event.currentTarget.Array;

что-нибудь в таком духе!!!

Старый 03.09.2010, 00:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 27  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Psycho Tiger, я правильно понимаю, мы создаём какой то объект, в него засовываем ссылку, точнее ссылка является индексом, и запихиваем туда нужное нам значение..
из функции онклик, мы имея ссылку выдергиваем из массива hash по индексу равному ссылке значение ячейки ??
Да. Array - это интовый хеш, Object - это строковой хэш, а Dictionary - это объектный хэш =) Коллекции, так сказать.

Цитата:
я догадываюсь, у автора есть функция playOver
Не функция, а метод. Функция в AS3 это другое.

Добавлено через 1 минуту
angry_beaver,
Код AS3:
class Test{
public var arr:Array=[1,2,3];
}
 
class Main extends Sprite{
trace((new Test()).arr); //1,2,3
}

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
По меньшей мере невежливо затыкать людей только по причине того, что они образованы чуть менее, чем Вы.
А я считаю не вежливым объявлять бредом код, по причине невнимательности прочтения постов.
Цитата:
AirDecade, про приведённый код, я мало понимаю пока в флеше, но, помоему это бред.

Старый 03.09.2010, 14:08
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 29  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
alatar получает второе предупреждение за флейм.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 03.09.2010, 15:33
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 30  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
function initButtons(arr:Array):void {
 
			for(var i:int = 0; i<arr.length; i++){
				arr[i].id = i;
				arr[i].addEventListener(MouseEvent.CLICK, doClick);		
			}
		}
		function playOver(e:MouseEvent):void {
 
			 trace(e.currentTarget.id);
			}
		}
}
вот и передали параметр . в чем трабла то?

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

Теги
array , EventListener , массив , получить , слушатель

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

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


 


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


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