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

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

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

Регистрация: Dec 2010
Сообщений: 3
Question Ошибка при совместном использовании "Switch Case" и "addEventListener". Нужна помощь

Нужна помощь с ошибкой "TypeError: Error #2007: Параметр listener не должен быть равен нулю."

Код AS3:
function test():void {
	for (var i:int = 0; i < 3; i++) {
 
		switch (i) {
			case 0:
				trace(i);
			break;
 
			case 1:
				trace(i);
				var qh:Sprite = new Sprite();
				qh.addEventListener(MouseEvent.CLICK, qh_func);
				function qh_func(event:MouseEvent):void {
					trace("it work?");
				}
			break;
 
			case 2:
				trace(i);
			break;
		}
 
	}
}
 
test();
В чем причина?. Заранее спасибо откликнувшимся

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
А зачем вы в case функцию вперли?

Старый 08.12.2010, 12:48
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 3  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
В том, что вы используете анонимные функции и пишете в кадрах =)
qh_func вынести из test хотя бы
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Довольно странная конструкция =)
Код AS3:
for (var i:int = 0; i < 3; i++) {
	switch (i) {
		case 0:
		break;
		case 1:
		break;
		case 2:
		break;
	}
}

Старый 08.12.2010, 12:55
Dzheen вне форума Посмотреть профиль Отправить личное сообщение для Dzheen Найти все сообщения от Dzheen
  № 5  
Ответить с цитированием
Dzheen

Регистрация: Dec 2010
Сообщений: 3
Насколько я понимаю ошибку вызывает вот эта строчка: qh.addEventListener(MouseEvent.CLICK, qh_func);

Вопрос стоит в том, можно ли как-то добавить слушателя событий в Case, и объявлять и использовать функции в Case

Как правильно сделать?

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
qh_func вынести из test хотя бы
.....

Старый 08.12.2010, 12:59
Dweem вне форума Посмотреть профиль Отправить личное сообщение для Dweem Найти все сообщения от Dweem
  № 7  
Ответить с цитированием
Dweem
 
Аватар для Dweem

Регистрация: Dec 2006
Адрес: 66°32′00″ с. ш. 66°38′00″ в. д.
Сообщений: 85
Цитата:
qh_func вынести из test хотя бы
этот ответ вас чем-то не устраивает?
Код AS3:
function test():void {
	for (var ........
}
 
function qh_func(event:MouseEvent):void {
	trace("it work?");
}
test();

Старый 08.12.2010, 13:01
Dzheen вне форума Посмотреть профиль Отправить личное сообщение для Dzheen Найти все сообщения от Dzheen
  № 8  
Ответить с цитированием
Dzheen

Регистрация: Dec 2010
Сообщений: 3
Цитата:
Сообщение от udaaff Посмотреть сообщение
Довольно странная конструкция =)
Код AS3:
for (var i:int = 0; i < 3; i++) {
	switch (i) {
		case 0:
		break;
		case 1:
		break;
		case 2:
		break;
	}
}
Это часть кода. Упростил и убрал все лишнее для примера. В реале функция должна обрабатывать XML (for ... each) и проверять атрибуты узлов на соответствие условиям (switch case)

Объясните, пожалуйста, в чем странность?

Добавлено через 3 минуты
Цитата:
Сообщение от Dweem Посмотреть сообщение
этот ответ вас чем-то не устраивает?
Код AS3:
function test():void {
	for (var ........
}
 
function qh_func(event:MouseEvent):void {
	trace("it work?");
}
test();
Устраивает)) Работает. Пока писал свои сообщения, ответили, не успел проверить работу. Спасибо за оперативность.
Разжуйте новичку, почему нельзя объявлять функцию в case, пожалуйста

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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Упростил и убрал все лишнее для примера.
Цитата:
Объясните, пожалуйста, в чем странность?
Возможно, вы слишком всё упростили, конечно...
Но в чем разница между:
Код AS3:
for (var i:int = 0; i < 3; i++) {
	switch (i) {
		case 0:
		trace(0);
		break;
		case 1:
		trace(1);
		break;
		case 2:
		trace(2);
		break;
	}
}
И
Код AS3:
trace(0);
trace(1);
trace(2);
?

Цитата:
Разжуйте новичку, почему нельзя объявлять функцию в case, пожалуйста
Потому что вложенные функции зло. Почему зло, поищите на форуме.

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

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
Да что вы к этим кейсам прицепились?
человек убрал все лишнее, в риале у него там в кейсах не просто трэйсы.

может анонимные функции и зло, но с ними иногда удобно. Если на то пошло, то интерпретируемый язык (даже если это байт-код) - тоже зло, а писать надо на ассемблере.

И проблема не в том, что функция анонимна, а в том, что она в свитче содержится. Просто вынесите функцию за пределы switch(){}
или если хочется там же, то внесите ее в addEventListener:

Код AS3:
addEventListener(Event.BLALALA, function(event){trace("ololo");} )
Тогда, отписаться от события получится только внутри функции:
Код AS3:
event.tareget.removeEventListener(event.type,arguments.calleee);


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

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

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


 


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


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