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

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

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

Регистрация: Nov 2006
Адрес: Издалёка
Сообщений: 83
Отправить сообщение для Greenish с помощью ICQ Отправить сообщение для Greenish с помощью Skype™
Объясните пожалуйста почему не работает следующий код?
Код:
package {
	import flash.display.*;
	import flash.events.*;
	public class Main extends Sprite {
		public function Main () {
			var mon=new Sprite();
			mon.addEventListener("gotoPos", goto);
			dispatchEvent(new Event("gotoPos",true,false));
		}
		public function goto() {
			trace("heaaaa");
		}
	}
}
Не смотрите что создается просто экземпляр Sprite, изначально был класс который наследуется от Sprite. Упростил...

Наверное не совсем понятно... Лучше на примере 2 классов:
1-й класс:
Код:
package {
	import flash.display.*;
	import flash.events.*;
	public class Main extends Sprite {
		public function Main () {
			var mon=new mySprite();
			dispatchEvent(new Event("gotoPos"));
		}
	}
}
2-й класс:
Код:
package {
	import flash.display.*;
	import flash.events.*;
	public class mySprite extends Sprite {
		public function mySprite () {
			addEventListener("gotoPos", goto);
		}
		public function goto() {
			trace("heaaaa");
		}
	}
}
получится если mon.dispatchEvent(new Event("gotoPos"));
но тогда зачем мне диспатчер нужен? если я знаю мувик. В проекте же я не буду знать его. Экземпляров будет много и надо чтобы все реагировали на событие


Последний раз редактировалось etc; 14.03.2008 в 00:20.
Старый 14.03.2008, 00:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Определитесь, у кого и на какие события вы подписываетесь.
Потому как вы подписываетесь на события объекта, которые он не ващает.

Старый 14.03.2008, 00:29
Greenish вне форума Посмотреть профиль Отправить личное сообщение для Greenish Посетить домашнюю страницу Greenish Найти все сообщения от Greenish
  № 3  
Ответить с цитированием
Greenish
 
Аватар для Greenish

Регистрация: Nov 2006
Адрес: Издалёка
Сообщений: 83
Отправить сообщение для Greenish с помощью ICQ Отправить сообщение для Greenish с помощью Skype™
ну это я понял. но как же тогда поступить? допустим я не просто создаю var mon=new mySprite();, а в цикле создаю несколько эземпляров. и надо чтобы по определенному событию в классе Main все они отреагировали. Не подскажите как это сделать?

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

Регистрация: Sep 2002
Сообщений: 30,787
В сторону всплывающих событий смотрите.

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

Регистрация: Nov 2006
Адрес: Издалёка
Сообщений: 83
Отправить сообщение для Greenish с помощью ICQ Отправить сообщение для Greenish с помощью Skype™
Я разобрался. Спасибо товарищу __etc! Для тех кто будет искать подобный ответ покажу на примере как я сделал. Если это не рационально, поправьте
Для того чтобы отовсюду принимать события я сделал класс синглтон от класса EventDispatcher. Например так:
Код:
package {
	import flash.events.EventDispatcher;
	import flash.events.Event;
	public class MyDispatcher extends EventDispatcher {
		private static  var _inst:MyDispatcher;
		private static  var __allowInstantiation:Boolean = false;
		public static var ACTION:String = "action";
		public static function get inst():MyDispatcher {
			if (!_inst) {
				__allowInstantiation = true;
				_inst = new MyDispatcher();
				__allowInstantiation = false;
			}
			return _inst;
		}
		public function MyDispatcher():void {
			if (!__allowInstantiation) {
				throw new Error("Вы не можете создавать экземпляры класса при помощи конструктора. Для доступа к экземпляру используйте Singleton.instance.");
			}
		}
		
		public function doAction(action:String):void {
			dispatchEvent(new Event(action));
		}
	}
}
Рутовый класс:
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	public class Main extends Sprite {
		public function Main () {
			var mon:MySprite=new MySprite();
			MyDispatcher.inst.addEventListener(MyDispatcher.ACTION, doingSomething);
			MyDispatcher.inst.doAction(MyDispatcher.ACTION);
		}
		public function doingSomething(event:Event) {
			trace("event from Main");
		}
	}
}
И класс от спрайта:
Код:
package {
	import flash.display.*;
	import flash.events.*;
	public class MySprite extends Sprite {
		public function MySprite () {
			MyDispatcher.inst.addEventListener(MyDispatcher.ACTION, doingSomething);
		}
		public function doingSomething(event:Event) {
			trace("event from MySprite");
		}
	}
}
В итоге в любом классе мы можем подписаться на события, тк MyDispatcher - синглтон.

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

Регистрация: Sep 2002
Сообщений: 30,787
Прочитайте ещё раз про всплывающие события.

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

Регистрация: Nov 2006
Адрес: Издалёка
Сообщений: 83
Отправить сообщение для Greenish с помощью ICQ Отправить сообщение для Greenish с помощью Skype™
хм. ну вот ваши слова: "....событие от детей поднимается вверх по родителям..." Я так понимаю это и есть всплывающие события. Но мне то надо не от детей к родителям, а в любом классе. Вот мой пример это реализовывает. Я не прав?

точнее принцип то конечно от детей к родителям но все таки почему еще раз прочитать я не понимаю..


Последний раз редактировалось etc; 17.03.2008 в 10:31.
Старый 16.03.2008, 23:44
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 8  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
этк, ссылку в студию
__________________
smival.com

Старый 17.03.2008, 10:21
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 9  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
http://riapriority.com/blogs/constantiner.php?cat=40

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от $mival
этк, ссылку в студию
Ссылку на хелп дать? Я думал, вы её сами знаете.

Greenish, у вас оба класса наследуются от DisplayObject, поэтому почему бы не применить встроенную модель событий? Организовывать некий синглтон, рассылающий события — очень спорное и неэффективное решение.

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

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

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


 


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


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