1

自分用のポートフォリオ Web サイトを作成していて、単純なフラッシュ ゲームである swf をメインのフラッシュ ファイルに埋め込みたいと考えています。私の問題は、このコードを使用してメインのフラッシュ ファイルに swf を配置すると、適切な swf の寸法が維持されず、ステージの外にあるものが表示されることです。私はそれを理解できないようです!どんな助けでも大歓迎です!ありがとう。

これが私のコードです(私はAS3でFlash CS3を使用しています。)

var my_Loader:Loader = new Loader();

var my_url:URLRequest=new URLRequest("piggybankgame.swf");

my_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, finishLoading);
my_Loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

my_Loader.load(my_url);

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

3 に答える 3

2

私の理解が正しければ、これはフラッシュ ゲーム SWF の作成方法に関係しています。おそらく、ステージ境界の外で何が起こっているかを気にせずに構築されています。

よくある誤解は、SWF の幅と高さによって定義される四角形がトリミング境界であるというものです。そうではない。SWF を表示するウィンドウがそれを表示するのに十分な大きさであれば、この境界線を超えるコンテンツはすべて表示されます。これは、オペレーティング システムでスタンドアロンの Flash Player ウィンドウのサイズを変更する場合、または SWF で定義された値よりも大きな値に設定された幅と高さで HTML ページに SWF を埋め込む場合にも発生します (たとえば、Flash CS3/CS4 からパブリッシュする場合)。

ゲームなどのコンテンツをより大きなサイズの SWF にロードし、ステージのサイズ内にあるゲーム SWF の部分のみを表示する場合は、それをマスクする必要があります。

var loader : Loader = new Loader();
loader.load(new URLRequest('my320x240game.swf'));

var gameMask : Shape = new Shape;
gameMask.graphics.beginFill(0xffcc00);
gameMask.graphics.drawRect(0, 0, 320, 240);

loader.mask = gameMask;
this.addChild(loader);

これにより、ローダー表示オブジェクトのトリミング マスクとして機能するベクター シェイプ (320x240 の長方形) が作成されます。マスクに精通している場合は、これが 320x240 の長方形の外側にあるものはすべて非表示になることを意味することを簡単に理解できると思います。

もちろん、コードを整理するためのより良い方法がありますが、これにより正しい方向に進むことが期待されます。

于 2009-12-20T19:09:39.607 に答える
0

Loader を親表示オブジェクトに追加するだけでよいと思います。例えば、

var gameSwf:Loader = new Loader();
gameSwf.load(new URLRequest("piggybankgame.swf"));
gameSwf.x = 100;
gameSwf.y = 100;
gameSwf.width = 320;
gameSwf.height = 200;
//Maybe make it visible of something     
gameSwf.contentLoaderInfo.addEventListener(Event.COMPLETE, gameLoaded);
gameSwf.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
addChild(gameSwf);

これがFlex 3でSWFLoaderクラスを使用して機能することは事実です。これは、Flexと同等であると私は信じています。

于 2009-12-18T00:38:01.263 に答える
0

SWF を読み込んだ後、必要なサイズに設定する必要があります =>

function finishLoading(loadEvent:Event) {
 var dob:DisplayObject= loadEvent.currentTarget as DisplayObject;
 // or
 // var dob:Loader = loadEvent.currentTarget as Loader;
 addChild(dob);
 dob.width=myWidth;
 dob.height=myHeight; 
}

もちろん、ロードしているswfは、渡した幅と高さで必要なことを行うことができます。

于 2009-12-18T00:41:47.840 に答える