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

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

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

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
По умолчанию addEventListener

Доброго времени суток!
Возможно, этот вопрос уже задавался, но найти ничего не смог.
Такой вот вопрос: класс first:

Код:
package main
{
	import flash.display.*;
        import flash.events.*;
	import main.*;

	public class first extends MovieClip
	{
		public function first():void
		{
			this.name = "firstMC";
			var a:second = new second();
			addChild(a);
			a.addEventListener(,ef);
		}

		private function ef(e:Event)
		{
			trace("I'm:" + this.name);
			this.x++;
		}
	}
}


класс second:

Код:
package main
{
	import flash.display.*;
	import flash.events.*;
	public class second extends MovieClip
	{
		public function second():void
		{
			this.name = "SecondMC";
		}
		
		private function ef(e:Event)
		{
			trace("I'm:" + this.name);
		}
	}
}

проблема заключается в том,что трейс пишет "FirstMC"Ю хотя я регистрирую слушатель на класс second. Как это понимать? Или, независимо от того,что я написал в "объекте", команда "объект".addEventListener(....) интерпретируется как "addEventListener(....)" и назначается слушатель к объекту, откуда назначается слушатель, т.е. в данном случае объекту типа first?

Старый 06.11.2007, 01:29
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код синтаксически неверен.
Названия классов должны начинаться строго с большой буквы.

Старый 06.11.2007, 11:50
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 3  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Просто надо почитать в хелпе что такое this !

Старый 06.11.2007, 13:09
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 4  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
DimG: В as3 в отличие от ас1/ас2, функция сохраняет свой scope, то есть this в теле функции будет всегда указывать на экземпляр класса в котором она определена.

Для твоих целей можно использовать Event#target, Event#currentTarget.

Код:
package main {
	import flash.display.*;
	import flash.events.*;
	import main.*;

	public class first extends MovieClip {
		....
		private function ef(e:Event) {
			trace("I'm:" + this.name);
			trace('Event Dispatcher: ' + e.target);
			this.x++;
		}
	}
}


Последний раз редактировалось 7thsky™; 06.11.2007 в 13:13.
Старый 06.11.2007, 15:10
DimG вне форума Посмотреть профиль Отправить личное сообщение для DimG Найти все сообщения от DimG
  № 5  
Ответить с цитированием
DimG
 
Аватар для DimG

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?

Старый 06.11.2007, 19:46
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 6  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Нефига не понял че ты написал, че и где что регистрирует... Пишу по своему.
Например:
Код:
myObject.addEventListener(MouseEvent.CLICK, onClick);
function onClick(event:MouseEvent):void
{
//...
}
Здесь мы подписались на прослушывание события "MouseEvent.CLICK" у объекта myObject. Теперь при возникновении события MouseEvent.CLICK, будет вызвана функция onClick().

Старый 06.11.2007, 19:50
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 7  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Цитата:
Сообщение от DimG
Спасибо!С этим разобрался.Попутный вопрос:
получается,что [object].addEventListener(...,ef) регистрирует слушателем [object],но при этом вызывает фунуцию, являющуюся не методом [object], а методом класса в котором дается команда addEventListner,верно?
Нет. Это значит, что к объекту [object], который диспатчит эвент мы назначаем обработчик события (любом метод любого класса, которому необходимо знать о совершении события)

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

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
Спасибо за ответы, очень выручили!
Еще один вопрос: если есть два файла: main.as и Second.as, (main - Document Class, Second обычные класс,наследуются от InteractiveObject), в первом создается объект object:Second, и добавляется листенер посредством команды object.addEventListener(Event.ENTER_FRAME,ef).
Теперь к делу: как удалить этот лисэнер, работая в файле Second.as? Нужно использовать ссылку на ф-ию ef относительно данного объекта?Если так, то как ее получить?
Объясните, пожалуйста!

Заранее благодарен!


Последний раз редактировалось DimG; 09.11.2007 в 00:46.
Старый 09.11.2007, 00:51
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 9  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
сделай 3й класс который будет руководить остальными двумя. Это имхо правильней.

Старый 09.11.2007, 10:31
DimG вне форума Посмотреть профиль Отправить личное сообщение для DimG Найти все сообщения от DimG
  № 10  
Ответить с цитированием
DimG
 
Аватар для DimG

Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
Спасибо, так и сделаю. Ну а вообще такое возможно?(удалять лисэнэр посредством передачи команде removeEventListener относительносй ссылки на ф-ию- метод другого класса? )

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

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

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


 


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


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