2009-11-15 4 views
0

Это цель, которую я пытаюсь выполнить, но не повезло. У меня есть простой swf с именем «btn.swf». У него есть кнопка, и когда она нажимается, она отправляет событие в родительское «Основное приложение»;Потеряно с отправкой события на CustomEvent Class

Затем я написал класс CustomEvent, к которому распространяется «btn.swf». Btn.swf создает экземпляр CustomEvent и отправляет событие.

Для того, чтобы загрузить содержимое swf в «Основное приложение», я написал CustomLoader, который расширяет класс Sprite. CustomLoader загружает контент в «Основное приложение».

Я не могу поймать отправленное событие в «Основное приложение». Я провел день на этом, и теперь довольно сильно измучил все, о чем я мог думать. Я был бы очень признателен за любую помощь в этом, пожалуйста.

Позвольте мне резюмировать мой класс Структура:

BtnClass расширяет класс CustomEvent. Btn Class отправляет событие BtnClass затем публикуется как btn.swf.

Класс CustomLoader используется классом CustomMain для загрузки btn.swf и захвата отправленного события btn.swf.

Отправленное событие теряется в переводе где-то. Возможно, возможно, я ошибаюсь.

Вот классы:
CustomEvent класса

package com.apps.comps.btn 
{ 
    import flash.events.*; 

    public class CustomEvent extends Event 
    { 
     public var data:*; 

     public static const BUBBLE_UP:String = 'BubbleUp'; 

     public function CustomEvent(type:String, customData:Object, bubbles:Boolean=false, cancelable:Boolean=false) 
     { 
      super(type, bubbles, cancelable); 
      this.data = customData; 
     } 

     override public function clone():Event 
     { 
      return new CustomEvent(type, data, bubbles, cancelable); 
     } 

     override public function toString():String 
     { 
      return formatToString('CustomEvent', 'type', 'data', 'bubbles', 'cancelable'); 
     } 
    } 
} 

BtnMain класс

package com.apps.comps.btn 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 
    import flash.errors.*; 
    import fl.controls.*; 

    public class BtnMain extends Sprite 
    { 
     public var evt:CustomEvent; 
     public var obj:Object = {name:'JOHN', game:'RUNNING'}; 
     public var data:*; 

     public function BtnMain() 
     { 
      trace("BTN MAIN INIT"); 
      createBtn(); 
     } 

     public function createBtn():void 
     { 
      var btn:Button = new Button(); 
      btn.label = 'CLICK ME'; 
      btn.x = btn.y = 200; 
      btn.addEventListener(MouseEvent.CLICK, btnHandler); 
      addChild(btn); 
     } 

     public function btnHandler(e:MouseEvent):void 
     { 
      evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, false, false); 
      this.dispatchEvent(evt); 
      trace('...'); 
     } 
    } 
} 

CustomLoader класс

package com.apps.comps 
{ 
    import flash.display.*; 
    import flash.net.*; 
    import flash.events.*; 
    import com.apps.comps.*; 

    public class CustomLoader extends Sprite 
    { 
     // URLLoader already has a data property, so I used extraData 
     private var _path:String; 
     public var _ldr:Loader; 
     public var eData:*; 

     public function CustomLoader($path:String) 
     { 
      this._path = $path; 
      loadContent(this._path); 
     }  

     private function loadContent(e:String):void 
     { 
      this._ldr = new Loader(); 
      this._ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
      this._ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
      this._ldr.load(new URLRequest(e)); 
     } 

     private function progressHandler(e:ProgressEvent):void 
     { 
      var percent:uint = Math.round((e.bytesLoaded/e.bytesTotal) * 100); 
      trace(percent); 
     } 

     private function onCompleteHandler(e:Event) 
     { 
      e.target.dispatchEvent('BubbleUp'); 
      this._ldr.contentLoaderInfo.addEventListener(CustomEvent.BUBBLE_UP, vHandler); 
     }  

     public function vHandler(e:CustomEvent):void 
     { 
      trace(e); 
     } 

     override public function dispatchEvent(event: Event) : Boolean 
     { 
      var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable); 
      return super.dispatchEvent(customEvent); 
     } 

    } 
} 

CustomMain класса

package com.apps.comps 
{ 
    import flash.display.*; 
    import flash.events.*; 
    import flash.net.*; 
    import flash.errors.*; 
    import com.apps.comps.*; 

    public class CustomMain extends Sprite 
    { 
     var custLdr:CustomEvent; 
     var obj:Object = {name:'SUPERMAN', game:'FLYING'}; 

     public function CustomMain() 
     { 
      //custLdr = new CustomLoader('movies/btn.swf'); 
      //addChild(custLdr); 
      this.dispatchEvent(CustomEvent(obj));   
      this.addEventListener(CustomEvent.BUBBLE_UP, vHandler); 

     } 

     function vHandler(e:Event):void 
     { 
      trace('TARZAN'); 
     } 

    } 
} 

Благодарю вас.

+0

Вы сказали, что BtnMain расширяет класс CustomEvent, что неверно двумя способами - это не сработает, если это правда, и ваш код показывает, что это неверно. BtnMain расширяет Sprite. – Amarghosh

+1

попробуйте следующее: http://stackoverflow.com/questions/1515869/ –

+0

Hey Amarghosh, Большое вам спасибо за вашу ссылку. Я это попробую. Спасибо. – Combustion007

ответ

0

Похоже, вы не настраиваете свое событие на BtnMain.as, поэтому CustomLoader его не получит. Попробуйте изменить эту строку в btnHandler, чтобы установить «пузырь» истину:

evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, true, false); 
0

Вы почти там, вы просто должны слушать объект, диспетчирование. Итак, в своем основном классе обратитесь к своему BtnMain и addEventListener.

package com.apps.comps 
{ 
import flash.display.*; 
import flash.events.*; 
import flash.net.*; 
import flash.errors.*; 
import com.apps.comps.*; 

public class CustomMain extends Sprite 
{ 
    var custLdr:CustomEvent; 
    var obj:Object = {name:'SUPERMAN', game:'FLYING'}; 

    public function CustomMain() 
    { 
     var btnMain:BtnMain = new BtnMain(); 
     addChild(btnMain); 

     /* This is the line you need */ 
     btnMain.addEventListener(CustomEvent.BUBBLE_UP, vHandler); 

    } 

    function vHandler(e:Event):void 
    { 
     trace('TARZAN'); 
    } 

} 
} 
Смежные вопросы