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

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

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

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Question Передача переменной в функцию через слушатель

Привет всем!
Есть такой примерный код:

Код AS3:
test_msg("test")
function test_msg(msg:String){
	trace(msg);//Выведет "test"
}
Тут все ок работает.
А вот немного модифицированный код:
Код AS3:
import flash.events.MouseEvent;
 
var obj:Object = new Object;// Тут не важно, что объект не материальный, на его месте может быть и мувик и все что угодно, все равно не работает.
 
obj.addEventListener(MouseEvent.CLICK,test_msg("test"));
 
function test_msg(msg:String){
	trace(msg);
}
В этом случае частично выполняет код - функция трейсится, но при этом далее выводит ошибку:
test
TypeError: Error #1006: addEventListener is not a function.
at Untitled_fla::MainTimeline/frame1()


В чем я не прав?
__________________
uglan

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

Регистрация: Nov 2007
Сообщений: 51
Интересует тоже вопрос, хотя по-моему никак не передать)

Код AS3:
obj.addEventListener(MouseEvent.CLICK,test_msg("test"));
Цитата:
Не используйте скобки, указывая параметр listener. Например, функция clickHandler() указывается без скобок в следующем вызове метода addEventListener():
addEventListener(MouseEvent.CLICK, clickHandler).
Почитал вот тут.
Ничего на эту тему не нашел) хотя может что пропустил))))))))))

-------------------

хотя почему бы для obj не указать дополнительное свойство. Например:
Код AS3:
obj.msg = 'test message';
obj.addEventListener(MouseEvent.CLICK,test_msg);
тогда по-идее в test_msg можно его вытащить:
Код AS3:
function test_msg(e:Event){
	trace(e.target.msg);
}


Последний раз редактировалось ExtendedPlay; 08.02.2010 в 12:56.
Старый 08.02.2010, 12:58
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 3  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
лучше через слушатель ничего не передавать, это не совсем правильно, но можно либо колбек сделать анонимный или внутри колбека поместить еще одну функцию и ей уже передавать эвент, но это все не есть правильно
__________________
Коллекционирую чужие ActionScript Блоги

Старый 08.02.2010, 13:28
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 4  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Сообщение от random13 Посмотреть сообщение
лучше через слушатель ничего не передавать, это не совсем правильно, но можно либо колбек сделать анонимный или внутри колбека поместить еще одну функцию и ей уже передавать эвент, но это все не есть правильно
Обьясню зачем это нужно. Есть несколько объектов которые вызывают одну и ту же функцию(отличие лишь во флаге). Объектов много, допустим 20. И чтобы обработать каждый мне придется написать для каждого однотипные функции. Это какой то хардкодинг...
Через obj вариант, только в основном коде у меня используется не MouseEvent который e:target передавать не умеет.
__________________
uglan

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
вопрос а что у вас
Код AS3:
e.target
возвращает?
__________________
Коллекционирую чужие ActionScript Блоги

Старый 08.02.2010, 14:11
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 6  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
точнее проблема получается в создании msg переменной внутри объекта.
просто
Код AS3:
e.target
возвращает
6: x:150 y:250 z:450

А если присвоить
Код AS3:
plane.msg = "test"
, то получается:
1119: Access of possibly undefined property msg through a reference with static type org.papervision3d.objects.primitives:Plane.
__________________
uglan

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
Цитата:
Сообщение от uglan Посмотреть сообщение
точнее проблема получается в создании msg переменной внутри объекта.
просто
Код AS3:
e.target
возвращает
6: x:150 y:250 z:450

А если присвоить
Код AS3:
plane.msg = "test"
, то получается:
1119: Access of possibly undefined property msg through a reference with static type org.papervision3d.objects.primitives:Plane.
что то я видимо уже не понимаю, извините а для чего нужно свойство target, вряд ли для передачи каких либо координат, или я отстал от жизни?
__________________
Коллекционирую чужие ActionScript Блоги

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

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Делайте свой эвент, отправляйте его с любыми параметрами, слушаете его где надо и спокойно получается параметры.

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
Цитата:
Сообщение от Hidest Посмотреть сообщение
Делайте свой эвент, отправляйте его с любыми параметрами, слушаете его где надо и спокойно получается параметры.
ну вобщем то здравое решение, тупо переопределить все что вам нужно и добавить туда свойство типа data
__________________
Коллекционирую чужие ActionScript Блоги

Старый 08.02.2010, 14:44
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 10  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Сообщение от Hidest Посмотреть сообщение
Делайте свой эвент, отправляйте его с любыми параметрами, слушаете его где надо и спокойно получается параметры.
Эм... А нельзя ли поподробнее) Никогда раньше не создавал своих ивентов.

Цитата:
что то я видимо уже не понимаю, извините а для чего нужно свойство target, вряд ли для передачи каких либо координат, или я отстал от жизни?
Для того чтобы написать лишь одну функцию которая будет обрабатывать все объекты которые на нее ссылаются независимо от их имен. Пример:
Код AS3:
var plane1:Plane = new Plane;
var plane2:Plane = new Plane;
...
plane1.indx = "test1";
plane1.addEventListener(InteractiveScene3D.OBJECT_CLICK,test_msg);
 
plane1.indx = "test2";
plane1.addEventListener(InteractiveScene3D.OBJECT_CLICK,test_msg);
 
function test_msg(e:Event){
   trace(e.target.indx);
}
__________________
uglan

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

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

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


 


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


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