2012-12-19 68 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'"); 
     } 
    } 
} 
}