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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.06.2013, 15:01
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию узнать о событии в момент создания экземпляра

Второй день сижу и просто думаю ,как лучше сделать...Подскажите пожалуйста, как "лучше" или как более "правильнее", можно сделать то ,что у меня ниже в коде?
Код AS3:
package  
{
 
	import flash.display.Sprite ;
	import flash.events.Event ;
 
 
	public class Main extends Sprite 
	{
		private var _a : A ;
 
		public function Main() 
		{
			_a = new A( "a" ) ;
			_a.addEventListener( Event.CHANGE ,aChangeHandler ) ;
		}
		private function aChangeHandler( e : Event ) : void
		{
			trace( e.type ,_a.str) ;
		}
	}
 
}
Код AS3:
package  
{
	import flash.events.EventDispatcher;
	import flash.events.Event;
 
	public class A extends EventDispatcher
	{
		private var _str : String ;
 
		public function A( str : String ) 
		{
			_str = str ;
			_str += "b" ;
			dispatchEvent( new Event( Event.CHANGE ) ) ;
		}
		public function get str() : String
		{
			return _str ;
		}
 
	}
 
}

Старый 19.06.2013, 15:23
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 2  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
А зачем вы это делаете ?
У вас есть
Код AS3:
_a = new A( "a" ) ;
Вот объект создался. дальше делайте с ним что хотите.
__________________
Oomph

Старый 19.06.2013, 15:40
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 3  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
А зачем вы это делаете ?
Если б я это знал) Кто то из авторов книг ,которые я читал ,говорит в моей голове ,что нужно использовать конструктор. После прочтения книги о моделях, и двух дней раздумья ,мне наверное, просто требовалось ,чтобы кто то подтвердил ,что ТАК НЕЛЬЗЯ) Спасибо!

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

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
AlexLucas и Akopalipsis, мне кажется вы друг друга не поняли...

to Akopalipsis: Конструкторы использовать нужно и полезно, при условии что применять их грамотно. Ваш пример не работает потому что вы диспатчите событие CHANGE в конструкторе, т.е. до того как повесится слушатель _a.addEventListener( Event.CHANGE ,aChangeHandler ), поэтому метод aChangeHandler и не срабатывает

Попробуйте так:
Код AS3:
package  
{
 
	import flash.display.Sprite ;
	import flash.events.Event ;
 
 
	public class Main extends Sprite 
	{
		private var _a : A ;
 
		public function Main() 
		{
			_a = new A( "a" ) ;
			_a.addEventListener( Event.CHANGE ,aChangeHandler ) ;
			_a.changeStr();
		}
		private function aChangeHandler( e : Event ) : void
		{
			trace( e.type ,_a.str) ;
		}
	}
 
}
Код AS3:
package  
{
	import flash.events.EventDispatcher;
	import flash.events.Event;
 
	public class A extends EventDispatcher
	{
		private var _str : String ;
 
		public function A( str : String ) 
		{
			_str = str ;
		}
 
		public function changeStr():void
		{
			_str += "b" ;
			dispatchEvent( new Event( Event.CHANGE ) ) ;	
		}
 
		public function get str() : String
		{
			return _str ;
		}
 
	}
 
}
__________________
FlashPress.ru | Blog

Старый 19.06.2013, 16:59
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 5  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
maincode Спасибо! Это я понимаю, программа на передачи this в конструктор ,переводит фокус на класс А и событие возникает раньше ,чем в Main завершилась инициализация переменной.
Код с ошибкой я намеренно для примера привёл ,но не сумел правильно сформулировать вопрос.
Вопрос наверное звучать должен... да так он и должен - как лучше обыграть такую ситуацию!
Можно конечно код ,выполнение которого ,вызывает событие ,перенести в отдельный метод и в Main
после передачи значения в класс А и завершения инициализации ,вызвать этот метод.......
Но вот тут у меня пока не вяжется с правильностью таких действий. я грешу на себя и на отсутствие опыта ,тем более после чтения высказываний опытных людей ,которые то и дело говорят о ОПП!
После Вашего совета я прочёл статью о MVC и в моей голове стало только больше туманности.
Там говорится ,что событие мыши ,нужно обрабатывать в другом классе ,да и то по событию чендж.
О том ,что чтобы код заработал ,нужно событие запускать с аргументом null и выходит ,что это хорошо. Но я уверен ,что еслибы я выложил пример ,работа которого бы была такой же ,но названия бы были не MVC ,то мне бы сказали ,что это не правильно)...
Но это я говорю не для того ,что бы сказать ,что кто то не так делает ,а для того ,чтобы по возможности вы понимали .какая каша у меня в голове и давали соответствующие ответы. И возвращаясь к теме - как лучше это сделать?

Добавлено через 4 минуты
Цитата:
Попробуйте так:
Спасибо!)

Добавлено через 1 час 1 минуту
Вот наверное я и приблизился к моменту ,который расставит в моей голове ,все выше сказанное ,на свои места. Но для этого мне нужно понять вот что...Почему в Main не срабатывает событие?
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
		private var _a : A ;
		private var _b : B ;
 
		public function Main():void 
		{
			_a = new A( ) ;
			_a.addEventListener( Event.CHANGE , changeHandler ) ;
			_b = new B( this );
		}
		private function changeHandler( e : Event ) : void
		{
			trace( e.type ) ;
		}
 
	}
 
}
Код AS3:
package  {
	import flash.events.Event;
	import flash.events.EventDispatcher ;
 
	public class A extends EventDispatcher{
 
 
		public function A(  ) {
 
		}
		public function go():void
		{
			trace( "i - A" ) ;
			dispatchEvent( new Event ( Event.CHANGE ) ) ;
		}
 
	}
 
}
Код AS3:
package  {
	import flash.display.DisplayObjectContainer;
 
	public class B {
		private var _a : A ;
 
		public function B( con : DisplayObjectContainer ) {
			_a = new A() ;
			_a.go() ;
		}
 
	}
 
}


Последний раз редактировалось Akopalipsis; 19.06.2013 в 18:03.
Старый 19.06.2013, 18:21
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 6  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
а где у вас вызов метода с диспатч?

Старый 19.06.2013, 18:38
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 7  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
У вас два объекта класса A, один создается в Main, второй - в классе B. Слушателя добавляете в Main-е, а метод go вызываете в классе B.

Наверно как так:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
		private var _a : A ;
		private var _b : B ;
 
		public function Main():void 
		{
			_a = new A( ) ;
			_a.addEventListener( Event.CHANGE , changeHandler ) ;
			_b = new B( _a );
		}
		private function changeHandler( e : Event ) : void
		{
			trace( e.type ) ;
		}
 
	}
 
}

Код AS3:
package  {
	import flash.display.DisplayObjectContainer;
 
	public class B {
		private var _a : A ;
 
		public function B( a : A ) {
			this._a = a;
			_a.go() ;
		}
 
	}
 
}
__________________
FlashPress.ru | Blog

Старый 19.06.2013, 18:43
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
а где у вас вызов метода с диспатч?
В классе В... То есть получается ,что уведомления получают только те классы ,которые его и вызывают?

Добавлено через 5 минут
maincode Спасибо! значит я неправильно понимаю очень важный момент...Опять читать!)

Добавлено через 14 минут
maincode Спасибо ещё раз!!!
Хорошо что я хоть добавил в конце вышеизложенного сообщения строку о "каше в голове".
А так бы мои слова, как осквернения ОПП бы выглядели)))
Это же разные экземпляры)))))))))


Последний раз редактировалось Akopalipsis; 19.06.2013 в 18:59.
Старый 19.06.2013, 19:28
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 9  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Зачем учить так писать код? Это же откладывается в голове хуже каши.
Есть отличные видеоуроки artempro.blogspot.ru

Старый 19.06.2013, 19:59
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 10  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Зачем учить так писать код?
Не знаю к кому Вы обращаетесь ,но в любом случаи - не какого кода нет! У меня был абстрактный вопрос на который я получил ответ! Если конечно есть ,что добавить ,то я только ЗА!
Цитата:
Есть отличные видеоуроки artempro.blogspot.ru
Я не могу оценивать их уровень качества ,потому что - это эталон всех уроков ( я конкретно говорю про мою тему ,другие не смотрел ). я бы урокам мастер - класса был бы рад!)

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

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

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


 


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


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