2012-12-19 69 views
0

我有一个Flash条码扫描器(相机),并希望在移动项目中使用它来扫描QR码。如果可以重新使用此SWF并将其嵌入到移动Flex应用程序中,那将是非常好的。 SWF是在Flash CS5中制作的。Flash Builder 4.6 Mobile Flex AS3:如何与嵌入式SWF通信

到目前为止,嵌入(并将其添加到舞台并显示它)是成功的,但我如何与SWF进行通信?例如调用它的函数或使用事件。

下面的代码片段:

[Embed(source="../cam/cam.swf")] 
private var cam:Class; 

.... 
.... 

public const EVT_SNAPSHOT : String = "onSnapShot"; 
public var camera : Object; 


public function onInit(e:Event) : void 
{ 
this.camera = new cam(); 
this.camera.addEventListener(Event.ADDED_TO_STAGE, this.cameraInit); 
this.stage.addChild(this.camera as DisplayObject); 
} 

private function cameraInit(e:Event):void 
{ 
trace('Added to stage'); 
this.stage.addEventListener(EVT_SNAPSHOT, this.cameraDoScan); // does not bind? 
trace(this.camera.hasOwnProperty('getAppInfo')); // shows 'false' 
} 

private function cameraDoScan(e:MouseEvent):void 
{ 
trace('MouseClick!'); 
} 

有谁知道这个“东西”进行沟通?

回答

0

使用外部SWF模块的最实用的方法是将其加载到当前ApplicationDomain,所以你将有机会获得包含在此加载的SWF的所有类:

package 
{ 
import flash.display.DisplayObject; 
import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.system.ApplicationDomain; 
import flash.system.LoaderContext; 
import flash.utils.ByteArray; 
import flash.utils.getDefinitionByName; 

public class astest extends Sprite 
{ 

    [Embed(source="/../assets/art.swf", mimeType="application/octet-stream")] 
    private static const art:Class; 

    public function astest() 
    { 
     var artBytes:ByteArray = new art() as ByteArray; 
     var loader:Loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onArtLoaded); 
     loader.loadBytes(artBytes, new LoaderContext(false, ApplicationDomain.currentDomain)); 
    } 

    protected function onArtLoaded(e:Event):void 
    { 
     var domain:ApplicationDomain = ApplicationDomain.currentDomain; 
     if(domain.hasDefinition("welcome_view")) 
     { 
      var moduleClass:Class = domain.getDefinition("welcome_view") as Class; 
      var module:Object = new moduleClass(); 
      //module.moduleFunction(); 
      addChild(module as DisplayObject); 
     }else 
     { 
      trace("loaded swf hasn't class 'welcome_view'"); 
     } 
    } 
} 
}