4

外部 SWF をロードしようとするアプリケーションがあります。したがって、次のようになります。

  • 私のアプリケーション: ステージの寸法は 768x1280 です。ScaleMode = EXACT_FIT。
  • 外部 SWF: ステージが 800x600 の別のアプリケーションです。ScaleMode = EXACT_FIT。

問題は、「scaleX、scaleY」を適用したり、幅を変更したりしても、外部の SWF がサイズを変更しないことです。また、Canvas コンテナーに挿入しようとしましたが (「コンテナーに収まるように外部 SWF のサイズを変更する方法」)、問題は解決しませんでした。興味深いコードは、外部 SWF がアプリケーションによってロードされるときです。

private function onLoadedApp( evt:Event ):void{ 
     stage.scaleMode = StageScaleMode.EXACT_FIT;    
     trace("Loading Application..");           
     var loaderInfo:LoaderInfo = evt.target as LoaderInfo;    
     loaderInfo.removeEventListener( Event.COMPLETE, onLoadedApp);   
     trace(loaderInfo.loader.content);           
     var swfApplication:SpriteUIComponent = new SpriteUIComponent(evt.target.loader.content );           
     if( SWFContainer.width < swfApplication.explicitWidth ){               
            var coef:Number = SWFContainer.width/swfApplication.explicitWidth;  
            swfApplication.scaleX = coef; 
            swfApplication.scaleY = swfApplication.scaleX;            
      }                
       SWFContainer.addElement(swfApplication);
}

SWFLoaderでもやってみましたが、「scaleContent」パラメータを追加してもexternal.swfの内容が元のサイズのまま変わりません。

私が得た視覚的な結果:

外部 SWF は適切な位置にロードされ、320x240 の薄暗い「ように見える」。ただし、Flash Player を引き伸ばすと、外部 SWF のステージの残りの部分が見えるようになるため、その幅は少しトリミングされています。また、Flash Player を縮小/拡大しても、外部 SWF のサイズが変更されることはありません。それは常に固定されたままです (寸法をトレースすると、視覚的には 320x240 に見えますが、常に 800x600 になります)。メイン アプリケーションのステージの幅を広げると、この小さなクリップが消えます。

討論:

元の Stage のサイズは 800 で、これはアプリケーションの元の Stage (768) よりも大きいことはわかっていますが、サイズ変更を行うときは、外部 SWF の Stage をコンテナーに収める必要があると思います。装着されていますが、外部SWFの一部が見られません。外部 SWF ステージの幅がアプリケーションの幅よりも大きいことを Flash Player が記憶しているようです...

前もって感謝します。

4

3 に答える 3

0

問題は ScaleMode にあるとは思いません。Flash Player ごとに 1 つのステージしか存在できません。「外部」SWF の「ステージ」プロパティは、表示リストに追加された後、「アプリケーション」SWF のステージを参照します。SWF がロードされ、表示リストに追加されていない場合、ロードされた SWF の「stage」プロパティは「null」になります。外部 SWF 内でステージの scaleMode を設定しても、別の SWF にロードされた後のスケーリング方法は指定されません。

また、SWF 自体ではなく、SWFContainer のサイズを変更している可能性があります。これが、SWF の幅と高さのプロパティが常に 800x600 である理由です。これがあなたが求めているものかどうかはわかりませんが、私が理解していることから、ステージのサイズ変更イベント リスナーを作成する必要があるかもしれません。

于 2011-05-11T18:00:32.023 に答える
0

scaleContent が「true」に設定されていても、内部 SWF のサイズ変更を試みるために、SWFLoader コントロールに正確な高さと幅を設定する必要があります。すべての scaleContent は、SWF を通常のサイズまたは引き伸ばしたサイズで表示する代わりに、必要に応じて SWF を拡大し、元の SWF の比率を維持するために拡大縮小するだけではありません。

于 2011-05-11T11:56:32.230 に答える
0

「External SWF」でスケールエフェクトを使ってみましたか?

スケール効果

于 2014-11-11T23:40:43.687 に答える