0

Flash バーコード スキャナー (カメラ) を持っていて、それをモバイル プロジェクトで使用して QR コードをスキャンしたいと考えています。この SWF を再利用して、モバイル Flex アプリケーションに組み込むことができるとよいでしょう。SWF は Flash CS5 で作成されています。

これまでのところ、埋め込み (およびステージに追加して表示) は成功していますが、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!');
}

この「もの」と通信する方法を知っている人はいますか?

4

1 に答える 1

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'");
        }
    }
}
}
于 2012-12-28T14:07:27.557 に答える