1

2つのswfsAとBがあり、実行時にswfAがswfBをロードし、ファイルサイズとダウンロード時間を最小限に抑えるために、それらの間でコードを共有したいとします。

swf Bにコード(com.blah.HelloWorldなど)がある場合、コンパイラにswfBのソースをswfAのクラスパスに含めるように指示しますが、コンパイル時のリンクのみを実行し、com.blah.HelloWorldを実際にはswfAにコンパイルしません。 。

これは機能し、-includesおよび-externsコンパイラオプションを使用して試してみました。

しかし、私の問題は、これを別の方法でやりたいということです。つまり、swf AとB(および場合によってはswf C)にはすべてcom.blah.HelloWorldが必要ですが、com.blah.HelloWorldをswf Aだけにコンパイルし、swf B(および場合によってはCも)の外部参照として使用する必要があります。 。)

externsとincludesを使用してこれを実行しようとしましたが、これを実行するとReferenceErrorsが発生します。

個別のrslを持たずにこれを実行したいので、httpリクエストの数を減らすことができます。これは可能ですか?

4

3 に答える 3

1

フレックスアプリケーションをモジュールに分割できます。

または、クラスのgetDefinitionメソッドを使用して、実行時にロードされたSWFから個々のクラスにアクセスできます。ApplicationDomain

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
loader.load(new URLRequest("c.swf"));
//..
private function onLoad(e:Event):void
{
  var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain;
  var Type:Class = domain.getDefinition("pack.MyComponent") as Class;
  var myBox:Sprite = new Type();
  addChild(myBox);
}
于 2009-09-25T04:51:23.010 に答える
0

私はあなたの質問を完全に理解しているとは思いませんが、AS3ローダークラスを使用してあなたが望むことをすることができると思います。形式は次のようになります。たとえば、メインアプリ(「a.swf」と呼ばれます)を作成していて、別のアプリ(「b.swf」と呼ばれる)にコンパイルされたメソッドとプロパティにアクセスしたいとします。 )、あなたはこれを行うでしょう:

var SWFB:Object; // empty at first as a placeholder.

var url:URLRequest  = new URLRequest("b.swf");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
l.load(url);

function loaded(e:Event):void {
 SWFB = e.currentTarget.content as Object;
 initApp();
}

function initApp():void {
 SWFB.someMethodCall();
}

...そして私はそれがうまくいくと思います。今はテストできませんが、試してみて教えてください。基本的に、b.swfを基本オブジェクトとしてロードし、そのオブジェクトに対してメソッドを呼び出すことができます。

それがうまくいったかどうか教えてください。うまくいかなかった場合は、明日あなたのためにそれを改良することができます。

于 2009-09-25T00:34:30.017 に答える
0

これがまさにあなたが望むものであるかどうかはわかりませんが、JavaScriptを使用して2つのswfsを連携させることができます。

チュートリアルは次のとおりです。

http://greeneggsandcam.com/tutorials/connect-2-swfs

于 2011-08-26T15:06:27.490 に答える