![]() |
|
||||||||||
|
|||||
|
Объясните пожалуйста почему не работает следующий код?
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");
}
}
}
Наверное не совсем понятно... Лучше на примере 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"));
}
}
}
package {
import flash.display.*;
import flash.events.*;
public class mySprite extends Sprite {
public function mySprite () {
addEventListener("gotoPos", goto);
}
public function goto() {
trace("heaaaa");
}
}
}
но тогда зачем мне диспатчер нужен? если я знаю мувик. В проекте же я не буду знать его. Экземпляров будет много и надо чтобы все реагировали на событие Последний раз редактировалось etc; 14.03.2008 в 00:20. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Определитесь, у кого и на какие события вы подписываетесь.
Потому как вы подписываетесь на события объекта, которые он не ващает. |
|
|||||
|
ну это я понял. но как же тогда поступить? допустим я не просто создаю var mon=new mySprite();, а в цикле создаю несколько эземпляров. и надо чтобы по определенному событию в классе Main все они отреагировали. Не подскажите как это сделать?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
В сторону всплывающих событий смотрите.
|
|
|||||
|
Я разобрался. Спасибо товарищу __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");
}
}
}
В итоге в любом классе мы можем подписаться на события, тк MyDispatcher - синглтон. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Прочитайте ещё раз про всплывающие события.
|
|
|||||
|
хм. ну вот ваши слова: "....событие от детей поднимается вверх по родителям..." Я так понимаю это и есть всплывающие события. Но мне то надо не от детей к родителям, а в любом классе. Вот мой пример это реализовывает. Я не прав?
точнее принцип то конечно от детей к родителям но все таки почему еще раз прочитать я не понимаю..Последний раз редактировалось etc; 17.03.2008 в 10:31. |
|
|||||
|
Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
|
этк, ссылку в студию
__________________
smival.com |
|
|||||
|
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
Greenish, у вас оба класса наследуются от DisplayObject, поэтому почему бы не применить встроенную модель событий? Организовывать некий синглтон, рассылающий события — очень спорное и неэффективное решение. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|