Flashゲームプログラミング講座 for ActionScript3.0

 

スロットルについて

 


■省電力化について


Flash Player 10.1 以降から、省電力化の仕組みが導入されました。
 
Flash Player は、スロットル状態や、一時停止状態に変化する事があります。
 

■スロットルについて

 
■スロットルの発生について
 
Flash Player の表示が隠れた場合、スロットル状態となります。
 
例えば、ブラウザをスクロールし、Flash Player が隠れた場合に発生します。
 
例えば、新しいタブを追加して、ページが隠れた場合に発生します。
 
デスクトップ向け Adobe AIR では、スロットルは発生しません。
 
■スロットル状態の動作について
 
フレームレートが、約 2 ~ 8 fps まで低下します。
 
タイマー系の処理も、同様のレートまで低下します。
 
描画関連の処理は、スキップされます。
 
サウンドの再生は、通常通りに動作します。
 

■一時停止について

 
■一時停止の発生について
 
Flash Player の表示が隠れた場合、一時停止状態となる事があるようです。
 
モバイルデバイス上で、サウンドやビデオを再生していない時に、ステージの表示が隠れると発生するようです。
 
■一時停止状態の動作について
 
フレームレートが、0 fps となります。
 
マウスやキーボード操作などを、無視します。
 
ネットワーク系のイベントは、通常通りに動作します。
 

■スロットルや一時停止のサポート状況について

 
実行環境ごとのサポート状況については、公式リファレンスが参考になります。
 
http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/events/ThrottleEvent.html
 
 

 

スロットルの発生を監視する

 


スロットルの発生を監視する

 
スロットルの発生を監視するには、ThrottleEvent.THROTTLE イベントを使用します。
 
Flash Player 11 以降で利用可能です。
 
デスクトップブラウザでの検出は、Flash Player 11.2 以降から対応しています。
 
任意の表示オブジェクトに対して、リスナーを登録します。
 
スロットルの発生を監視する

import flash.events.ThrottleEvent;

// ------------------------------------------------------------
// スロットルのステート状態に変化があると実行されるイベント
// ------------------------------------------------------------
stage.addEventListener(ThrottleEvent.THROTTLE,function (e:ThrottleEvent):void{

	// 出力テスト
	trace(e);

});
 
ThrottleEvent のプロパティについて
 
ThrottleEvent オブジェクトには、以下の読み取り専用のプロパティがあります。(一部抜粋)
 
プロパティ名説明
stateString現在のステート情報が得られる。ThrottleType.*
targetFrameRateNumber現在のフレームレート値が得られる。
 
ThrottleType 定数について
 
スロットルのステート情報として、以下のタイプが定義されています。
 
プロパティ名文字列説明
ThrottleType.RESUME"resume"通常の実行状態です。
ThrottleType.THROTTLE"throttle"スロットルの状態です。(約 2 ~ 8 fps)
ThrottleType.PAUSE"pause"一時停止の状態です。( 0 fps)
 
取得例
 
スロットルのステート状態に変化が発生したか調べる

import flash.events.ThrottleEvent;
import flash.events.ThrottleType;

// ------------------------------------------------------------
// スロットルのステート状態に変化があると実行されるイベント
// ------------------------------------------------------------
stage.addEventListener(ThrottleEvent.THROTTLE,function (e:ThrottleEvent):void{

	// ステート情報を取得する
	var state:String = e.state;

	// フレームレートを取得する
	var frame_rate:Number = e.targetFrameRate;

	// 出力テスト
	trace(state);
	trace(frame_rate);
});