1

外部swfをロードして表示するクラスのインスタンスを取得しようとしています。1) Loader クラスを使用して外部 swf "loadExtSWF" をロードするクラスを作成しました。2) ドキュメント クラス「MainSWF.as」を使用する「MainSWF.fla」という名前のフラがあります。3) 「loadExtSWF」をインスタンス化し、loadExtSWF.startLoad を呼び出して swf をロードする MainSWF.as ファイルがあります。

これはほとんど機能します。loadExtSWF のインスタンスは外部の swf をロードしますが、swf は表示されません。

fla のドキュメント クラスを MainSWF の代わりに loadExtSWF (これには空のコンストラクターがあります) に置き換え、loadExtSWF.startLoad を実行すると、外部 SWF が読み込まれて表示されます。

私が最初に行った方法では、swf を間違ったステージ (?) にロードしているようです。

何か案は?助けてくれてありがとう。

さようなら、ラーム

PS

test_tsscreen のドキュメント クラスを test_tsscreen.as から TSScreen.as に置き換え、test_tsscreen のコンストラクター内のコメントを削除すると、swf が読み込まれます。

私のコードは次のとおりです。

ファイル test_as3.swf

外部 as3 swf ファイル。

ファイル test_tsscreen.fla

fla は空で、ドキュメント クラスとして test_tsscreen.as を参照します。

ファイル test_tsscreen.as

package {

 import flash.display.MovieClip;
 import TSScreen;

 public class test_tsscreen extends MovieClip{
  var tsScreen1;

  public function test_tsscreen(){
//   var tsScreen1:TSScreen = new TSScreen(10,10,100,100,0.5,0);
   var tsScreen1:TSScreen = new TSScreen();
   tsScreen1.startLoad(this.stage);
  }
 }
}

ファイル TSScreen.as

package {
 import flash.display.MovieClip;

 import flash.display.*;
 import flash.net.URLRequest;
 import flash.system.ApplicationDomain;
 import flash.system.LoaderContext;

 import flash.display.Loader;
 import flash.events.Event;
 import flash.events.ProgressEvent; 

 public class TSScreen extends MovieClip implements ITSScreenable{


  public function TSScreen():void{
//   startLoad(this); //Look important comment in above text
  }


  function startLoad(_this:Stage) {
   var mLoader:Loader = new Loader();
   var mRequest:URLRequest = new URLRequest("test_as3.swf");

   mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
   mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
   _this.parent.addChild(mLoader);
   mLoader.load(mRequest);
   trace(this.name);
   trace(_this.name);
  }

  function onCompleteHandler(loadEvent:Event) {
   addChild(loadEvent.currentTarget.content);
  }

  function onProgressHandler(mProgress:ProgressEvent) {
   var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
   trace(percent);
  }


 }
}
4

1 に答える 1

2

時々起こることですが、質問をすることはあなたの答えを見つけることにつながります. マニュアルをもう一度読んだ後、AS3 に新しい swf を追加したら、新しい DisplayObject を既存の DisplayObjectContainer 内の既存の DisplayObject の子として追加する必要があることがわかりました。

ということで、外部swfをちゃんと読み込んだのにDisplayListに追加しておらず、表示されなかったのが問題でした。

これは、以前に引用したコード ブロックの修正バージョンです。

test_tsscreen.as

パッケージ {

import flash.display.MovieClip;
import TSScreen;

public class test_tsscreen extends MovieClip{
    var tsScreen1:TSScreen;

    public function test_tsscreen(){
        tsScreen1 = new TSScreen(10,10,100,100,0.5,0);
        //tsScreen1 = new TSScreen();
        this.addChildAt(tsScreen1,1);
    }
}

}

TSScreen.as

パッケージ { import flash.display.MovieClip;

import flash.display.*;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;

import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;  

public class TSScreen extends MovieClip {
    private var _xPos:int;
    private var _yPos:int;
    private var _width:int;
    private var _height:int;
    private var _xScale:int;
    private var _yScale:int;

    private var _visible:Boolean;
    private var _alpha:Boolean;
    private var _shadow:Boolean;
    private var _backgroundColor:uint;
    private var _rotation:Boolean;

    private var _displayTime:int;


    public function TSScreen():void{
        startLoad();
    }


    function startLoad() {
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest("C:/FlashProjects/test_as3.swf");

        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
        mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
        addChild(mLoader);
        mLoader.load(mRequest);
    }

    function onCompleteHandler(loadEvent:Event) {
        addChild(loadEvent.currentTarget.content);
    }

    function onProgressHandler(mProgress:ProgressEvent) {
        var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
        trace(percent);
    }


}

}

詳細については、本「FriendsofED Foundation Actionscript 3.0 With Flash CS3」の第 04 章を参照してください。

これが同じ問題を抱えている他の人に役立つことを願っています。

于 2010-04-15T16:27:11.467 に答える