Search code examples
actionscript-3osmf

detect event from SWFElement in OSMF


I use OSMF's SWFElement for my project to load SWF file in to main Application but the main app can't detect event from child SWF at all, tried to search around but not found any solution

CODE in the Main App

 mediaPlayerSprite = new MediaPlayerSprite();
 var swfElement:SWFElement = new SWFElement();
 swfElement.resource = new URLResource("file:///C:/Users/user/document/OXO/SWF/sampleswfanimation.swf");
 // this one not work
 swfElement.addEventListener('animationEnd',onSWFEnd );

 //this one not work
 var loadTrait:LoadTrait = mediaElement.getTrait(MediaTraitType.LOAD) as LoadTrait;
 loadTrait.addEventListener('animationEnd',onSWFEnd );
//this one not work too
var displayTrait:DisplayObjectTrait = mediaElement.getTrait(MediaTraitType.DISPLAY_OBJECT) as DisplayObjectTrait;
displayTrait.addEventListener('animationEnd',onSWFEnd );
displayTrait.displayObject.addEventListener('animationEnd',onSWFEnd );

        addChild(mediaPlayerSprite);
        mediaPlayerSprite.media = swfElement;

CODE in the Child Flash SWF using Flash CS3 add code in The FLASH TimeLine

this.dispatchEvent(new Event('animationEnd') );

Solution

  • I came up with the following solution.I'm not sure if there are better ways but but it works fine.

          mediaPlayerSprite = new
          MediaPlayerSprite();
          var swfElement:SWFElement = new SWFElement();
          swfElement.resource = new URLResource("file:///C:/Users/user/document/OXO/SWF/sampleswfanimation.swf");
     swfElement.addEventListener(MediaElementEvent.TRAIT_ADD,onTraitAdd);  
    
    function onTraitAdd(evt:MediaElement):void
    {
       if(evt.traitType == "displayObject")
      {
         var swf:SWFElement = evt.currentTarget as SWFElement;
         var displayTrait:DisplayObjectTrait  = swf.getTrait( MediaTraitType.DISPLAY_OBJECT ) as DisplayObjectTrait;
         var loader:Loader = Loader(displayTrait.displayObject);
         loader.content.addEventListener( 'animationEnd',onSWFEnd );
      }
    }