5

そのため、バージョン 10.1 以降の Flash Player には新しい「機能」があり、アプリケーション ウィンドウが表示されていないときにプレーヤーのフレームレートを 2 fps に下げます。これはパフォーマンスにとっては朗報ですが、Timer クラスなどの一部の機能が損なわれる可能性があります。

タイマーを使用してカウントダウンを表示するアプリケーションがあります。アプリケーションの性質上、ユーザーがその場にいなくてもタイマーがカウントダウンを完了する必要があります。ユーザーがタスクを実行するのに 10 秒しか与えられないとします。ユーザーがカウンターの途中でウィンドウを最小化した場合、ウィンドウに戻るまでに 5 秒の時間が残っていても、必要なだけ時間を費やすことができます。これは明らかに、新しいフラッシュ プレーヤーでは回避できません。

Air アプリケーションには、この動作を防ぐために設定できる backgroundFrameRate プロパティがありますが、これは WindowedApplication クラスの一部であるため、Web アプリケーションでは使用できないようです。ウィンドウが表示されていない場合でも一定のフレームレートを維持する方法を知っている人はいますか? ありがとう

4

3 に答える 3

1

埋め込まれた swf の wmode パラメータを opaque に設定すると、フレームレートのスロットリングが防止されます。

ブライアン

于 2011-11-28T10:32:04.343 に答える
0

テスト:

private var numer:int = 0;
private var prevNumer:int = 0;
private var timer:Timer = new Timer( 1000, 0 )

[...]

var tf:TextField = new TextField ();
addChild (tf);
addEventListener ( Event.ENTER_FRAME, onEnterFrame )
timer.addEventListener (TimerEvent.TIMER, onTimer )
timer.start()
function onTimer ( e:TimerEvent ):void
{ tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer;}
function onEnterFrame ( e:Event ):void { numer++ }

フラッシュが表示されると、tfがFPSに等しい数値を追加することを明確に示しています。タイマーがFPSと一緒に変更される場合、ウィンドウを最小化しても違いはわかりません。しかし、戻ってくると2 2 2 2 2が表示されます。つまり、FPSが2に低下しました。

AsTheWormTurnsによるonDeactivateソリューションは機能しません。イベントは発生しますが、fpsは変更されません。ブライアンビショップ氏によるwmode=opaqueソリューションも機能しません

試してみるべき明らかなこと:onEnterFrame関数を変更してFPSを設定します。

function onEnterFrame ( e:Event ):void { numer++; stage.frameRate = 30 }

もちろん、フラッシュが表示されていないときはFPSを設定できません。ええと、1に設定しないとFPSを設定することはできません。

問題の回避策は簡単です。上記と同様の別のタイマーを作成しますが、条件付きで追加します。

function onTimer ( e:TimerEvent ):void {
if ( numer - prevNumer == 2 ) adjustOriginalTimer();
tf.appendText (' ' + (numer - prevNumer)); prevNumer = numer;
}

E:ここでそれについて読むことができます:http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html

于 2012-01-22T20:06:55.710 に答える
0

私は自分で試したことはありませんが、フレームレートを強制的に onDeactivate にすることができます:

stage.addEventListener(Event.DEACTIVATE, onDeactivate); 

function onDeactivate (e:Event):void 
{ 
    //eg myFrameRate=24
    stage.frameRate = myFrameRate; 
} 

これがうまくいくかどうか教えてください。

于 2011-11-29T09:47:07.577 に答える