0

通常、私のプリローダーは 20 フレームで、次のようになります。

フレーム 1 のアクション スクリプト:

var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
preloader._width = amountLoaded * 200;
loadText.text = Math.round(amountLoaded * 100) + "%";

if(_root.getBytesLoaded() == _root.getBytesTotal())  {
     gotoAndPlay(21);
}

else {
     gotoAndPlay(1);
}

フレーム 20 では、次のことが明らかです。

this.gotoAndPlay(1);

これは問題なく動作しますが、フラッシュのイントロを再生したいのはホームページだけです。したがって、ホームページ以外のすべてのページで FlashVars を使用して、どこにスキップするかをアニメーションに伝えます。

これを行うために、プリローダーの後の最初のフレームにこれを配置しました。

gotoAndPlay(AdFrame);

ホームページを除くすべてのページに、次の Flash 変数を追加しました。

<param name="FlashVars" value="AdFrame=39" />

私の質問: アニメーションが読み込まれている場合、プリローダーを完全にスキップするにはどうすればよいですか?

私の失敗した試み: フレーム 2 で開始するようにプリローダーを移動しようとしましたが、フレーム 1 で次のように変更されました。

var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
preloader._width = amountLoaded * 200;
loadText.text = Math.round(amountLoaded * 100) + "%";

if(_root.getBytesLoaded() == _root.getBytesTotal())  {
     gotoAndPlay(AdFrame);
}

else {
     gotoAndPlay(2);
}

ただし、それでもプリローダーをバイパスしません。

コンテンツがロードされている場合、プリローダーを完全にスキップする方法について何か考えはありますか?

4

1 に答える 1

0

私がこれを正しく理解している場合、条件は true と評価されません。これは、SWF がブラウザーのキャッシュから読み込まれた場合でも、最初のフレームで メソッドgetBytesLoadedとメソッドによって返される値が同じではないためです。getBytesTotal

このような場合は、負荷ステータスを確認する前に待機してみてください。コードをフレーム 2 に移動し、プリローダー アニメーションの開始をフレーム 3 に移動するだけで十分な場合があります。(タイムラインを操作しなければならなかったのは久しぶりですが、フレームを待機することが多くの場合、経験則として適切だったことを覚えているようです)。

または、チェックを実行する前に、最初のフレームで短い間隔で一時停止することもできます。

stop();

var interval = setInterval(function() {

    clearInterval(interval);

    var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
    preloader._width = amountLoaded * 200;
    loadText.text = Math.round(amountLoaded * 100) + "%";

    if(_root.getBytesLoaded() == _root.getBytesTotal())  {
         gotoAndStop(3);
    }

    else {
         gotoAndStop(2);
    }
}, 500); 

間隔の長さをいじることができます (0.5 秒は長すぎる場合があります)。インターバルは、再生ヘッドが最初のフレームに戻るたびに実行されることに注意してください。これは、インターバルの長さによっては問題にならない場合があります。それが問題である場合は、間隔が最初に実行されるときにブール値フラグを設定して、後続のループで再度実行しないようにすることを検討できます。

于 2012-05-30T23:18:16.867 に答える