2013-10-09 3 views
1

Я сделал кнопку/дверь и добавил, как класс, я хочу это так, когда вы нажимаете на него, он отправляет событие, которое сигнализирует функцию на главной странице ACTIONSCRIPT запуститьAS3 Использование Event Dispatcher

package { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class Door extends MovieClip { 

     var direct:String; 
     var doorId:int; 
     var dispatcher = new EventDispatcher(); 

     public function Door() { 
      this.addEventListener(MouseEvent.CLICK, changeRoom) 
      this.buttonMode = true; 
     } 

     function changeRoom(e:MouseEvent):void{ 
      trace("door click") 
      dispatcher.dispatchEvent(new Event("doorClick")); 
     } 
    } 
} 

главная страница выглядит следующим образом

var doorTop = new Door(); 
doorTop.addEventListener("doorClick",goToRoom); 
//should i be doing stage.addEventListener("doorClick",goToRoom); 
function goToRoom(e:Event):void 
{ 
    trace("i went here") 
} 

, что я делаю неправильно? кажется достаточно прямым вперед

ответ

4

Вы не отправляете мероприятие от doorTop, вы отправляете его от dispatcher в пределах doorTop.

Door распространяется MovieClip, который распространяется на EventDispatcher. Вам не нужно создавать EventDispatcher, ваш класс Door уже один.

Просто сделай это:

function changeRoom(e:MouseEvent):void{ 
     trace("door click") 
     this.dispatchEvent(new Event("doorClick")); 
    } 

Это направит его из Door объекта.

Кроме того, если вы используете классы, каждый объект (включая функции), объявленный в рамках класса верхнего уровня класса, должен включать модификатор доступа (открытый, закрытый, внутренний или защищенный). Вы не можете просто объявить function changeRoom, это должно быть public function changeRoom. То же самое с каждой из ваших переменных.

+0

У меня вопрос: что, если класс не расширяет Диспетчер событий, что было бы правильным путем? Как только он будет получен, как определить, кто его назвал? – artSir

+0

Если вам нужно использовать события с классом, вы должны ** всегда ** расширять 'EventDispatcher'. Вы никогда не должны создавать экземпляр фактического EventDispatcher в своем коде. Ничто не останавливает вас (вы должны приложить слушателя к 'object.dispatcher' в этом случае, а не к' object'), но вам даже не нужно. Большинство объектов уже расширяют EventDispatcher, тоже –

+0

спасибо, что я могу использовать, чтобы определить, кто отправил событие? что-то вроде this.target.e? – artSir