1

Google は、次のような質問はそれほど珍しいものではないことを示唆しています。Loader を使用して何かを Flash ステージにロードした後、サイズを変更したいと考えています。ただし、コンテンツが読み込まれる前にこれを行うと、画像のサイズを変更すると画像が消えてしまいます。

提案された解決策は、通常、Event.COMPLETE のイベント リスナーを使用することです。これが私のコードです:

public function FlixelTest()
    {
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        myLoader = new Loader();                     
        myLoader.x = (stage.fullScreenWidth-640)/2;
        myLoader.y = (stage.fullScreenHeight-480)/2;
        addChild(myLoader);                                     

        var url:URLRequest = new URLRequest("stuff.swf");
        myLoader.load(url);    
        myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);


    }

    function loadProdComplete(e:Event):void{
        myLoader.height = 480;
        myLoader.width = 640;
    }

これまでオンラインで見つけたすべての投稿によると、このソリューションは機能するはずです。イベントが発生すると、ローダーが完了し、サイズを変更できます。しかし、そうではありません。.height と .width を変更する行をコメント アウトすると、SWF が表示され、コメントを解除して再度実行すると、SWF が読み込まれません。

他に何か干渉している可能性はありますか? これは、FlashBuilder を使用して Actionscript3 -> Android プロジェクトを構築しています。

編集 - ここでの解決策も機能していないようです: swf をロードした後のローダーのサイズ変更の問題

更新 - 次のような、機能する恐ろしい解決策があります。

function loadProdComplete(e:Event):void{
        if(myLoader.width != 0){
            myLoader.width = 640;
            myLoader.content.width = 640;
        }
        else{
            timer = new Timer(500);
            timer.addEventListener(TimerEvent.TIMER, timertick); // there should be a comma here but yahoo replaces it with ... 
            timer.start();
        }
    }

    function timertick(e:TimerEvent){
        timer.stop();
        stage.dispatchEvent(new Event(Event.COMPLETE));
    }

基本的に、コンテンツの幅を使用して、読み込みが完了したかどうかを確認します。そうでない場合は、0.5 秒待機してから COMPLETE イベントを再起動します。これは実際に表示に役立ちます(幅は調整されていませんが、それは別の問題だと思います)-これが機能させる唯一の方法だとは信じられません...

4

1 に答える 1

1

厳密には解決策ではありませんが、これを回避する方法は、サイズをまったく変更しないことです。代わりに、ウィンドウ上の領域をトリミングして、表示したいセクションだけを表示します。

function loadProdComplete(e:Event):void{
        var gameMask : Shape = new Shape;
        gameMask.graphics.beginFill(0xffcc00);
        gameMask.graphics.drawRect(myLoader.x,myLoader.y,640,480);  
        gameMask.graphics.endFill();
        myLoader.content.mask = gameMask;
    }

とにかくステージ外の雑然としたものを隠すためにマスクが必要だったので、これは一度に2つの問題を解決しました。

誰かが別の洞察を持っている場合の答えとしてこれを受け入れることはありませんが、誰かがこの質問に出くわした場合、これは考えられる解決策です。

于 2012-07-07T12:48:05.537 に答える