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

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

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

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
По умолчанию Странности цикла

Я конечно понимаю, что данный заголовок скорее подойдет для форумов с другой тематикой... Проблема именно в цикле...) Вопрос сугубо теоретический, но поверг меня в недоумение, попытаюсь вкратце описать.

Я добавляю объекты (box) используя распространенный цикл for, создаю обработчик, который при наведении на бокс выделяет его, выглядит примерно так:
Код AS3:
 
public function friendsLoaded():void
{
	for (i = 0; i < 6; i++)
	{ 
		add();
	}
}
 
public function add():void {
     //объект бокс, его свойства и т.д. 
}
 
box.addEventListener(MouseEvent.ROLL_OVER, evnt);
box.addEventListener(MouseEvent.ROLL_OUT, evnt1);
 
function evnt(e:MouseEvent):void {
	box.alpha = 0.5;
}
 
function evnt1(e:MouseEvent):void {
	box.alpha = 1;
}
При наведении курсора на любой объект, выделяется именно он

если я не создаю доп. функцию, а делаю все непосредственно в цикле, так:
Код AS3:
public function friendsLoaded():void
{
	for (i = 0; i < 6; i++)
	{ 
		//объект бокс, его свойства и т.д.
	}
}
 
box.addEventListener(MouseEvent.ROLL_OVER, evnt);
box.addEventListener(MouseEvent.ROLL_OUT, evnt1);
 
function evnt(e:MouseEvent):void {
	box.alpha = 0.5;
}
 
function evnt1(e:MouseEvent):void {
	box.alpha = 1;
}
выделяется самый крайний нижний объект, при наведении на любой... Логичный вопрос - почему?


Последний раз редактировалось udaaff; 12.10.2011 в 16:03.
Старый 12.10.2011, 01:44
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
выделяется самый крайний нижний объект, при наведении на любой... Логичный вопрос - почему?
Потому что вы выделяете последний созданный.

Код:
function evnt(e:MouseEvent):void {
	e.currentTarget.alpha = 0.5;
	
}
function evnt1(e:MouseEvent):void {
	e.currentTarget.alpha = 1;
	
}

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Потому что после прохождения цикла в переменной box хранится ссылка на последний объект из цикла.

Старый 12.10.2011, 01:47
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 4  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
но первый вариант то работает... как это объяснить?

Добавлено через 8 минут
Цитата:
Сообщение от illuzor Посмотреть сообщение
Потому что вы выделяете последний созданный.

Код:
function evnt(e:MouseEvent):void {
	e.currentTarget.alpha = 0.5;
	
}
function evnt1(e:MouseEvent):void {
	e.currentTarget.alpha = 1;
	
}
Спасибо ваш вариант мне действительно помог, если бы не ошибочно правильно работающий скрипт, возможно нашел бы его раньше)

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
в первом варианте в каждом шаге цикла создаются (локально для функции add) новые переменные box и новые слушатели evnt и evnt1

Старый 12.10.2011, 11:36
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 6  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
Код AS3:
public function friendsLoaded():void
 
			{
				for (i = 0; i < 6; i++)
				{ 
					//объект бокс, его свойства и т.д. }
					box.addEventListener(MouseEvent.ROLL_OVER, evnt);
                                        box.addEventListener(MouseEvent.ROLL_OUT, evnt1);
				}
			}
 
 
 
function evnt(e:MouseEvent):void {
	box.alpha = 0.5;
 
}
function evnt1(e:MouseEvent):void {
	box.alpha = 1;
 
}

Старый 12.10.2011, 19:27
Newred вне форума Посмотреть профиль Отправить личное сообщение для Newred Посетить домашнюю страницу Newred Найти все сообщения от Newred
  № 7  
Ответить с цитированием
Newred
 
Аватар для Newred

Регистрация: May 2010
Адрес: Киев, Украина
Сообщений: 140
Записей в блоге: 2
Код AS3:
// init Listener
addEventListener(MouseEvent.ROLL_OVER, roll_over);
addEventListener(MouseEvent.ROLL_OUT, roll_out);
 
public function friendsLoaded():void
{
	for (i = 0; i < 6; i++)
	{ 
		//объект бокс, его свойства и т.д. }
	}
}
 
private function roll_over(e:MouseEvent):void {
	e.target.alpha = 0.5;
 
}
private function roll_out(e:MouseEvent):void {
	e.target.alpha = 1;
 
}

Старый 12.10.2011, 23:35
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 8  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
[quote=Newred;1038688]

А вдруг на сцене еще и кружочки будут кроме квадратиков? А им другие обработчики...

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

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

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


 


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


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