(frameRateを取得するために)ステージにアクセスしたいユーティリティクラスがあるとします。
特に、ユーザーがステージを各メソッドに渡すように強制したり、クラスを使用する前にクラスに静的プロパティを設定したりする必要はありません。
ステージを通過せずにステージを手に入れる方法はありますか?必要なのはframeRateだけです!
(frameRateを取得するために)ステージにアクセスしたいユーティリティクラスがあるとします。
特に、ユーザーがステージを各メソッドに渡すように強制したり、クラスを使用する前にクラスに静的プロパティを設定したりする必要はありません。
ステージを通過せずにステージを手に入れる方法はありますか?必要なのはframeRateだけです!
メインドキュメントクラス(またはステージへの参照が利用可能な場合)でフレームレートをパブリック静的変数またはパブリック定数として設定し、ユーティリティクラスからその静的変数を呼び出します。
ドキュメントクラス
package
{
//Imports
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
//Class
[SWF(width = "1000", height = "500", BackgroundColor = "0x555555")]
public class DocumentClass extends Sprite
{
//Static Variables
public static var FRAME_RATE:uint;
//Constructor
public function DocumentClass()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.frameRate = FRAME_RATE = 60;
//...
}
}
}
ユーティリティクラス
package
{
//Imports
import flash.events.EventDispatcher;
//Class
public class UtilityClass extends EventDispatcher
{
//Constructor
public function UtilityClass()
{
trace("SWF Frame Rate: " + DocumentClass.FRAME_RATE);
}
}
}
[編集]:
ステージに直接アクセスできない場合は、ユーザーstage.frameRate
にユーティリティクラスのコンストラクターに値を渡してもらうことができますが、このアプローチはあまり洗練されていないことに同意するでしょう。ENTER_FRAMEイベント間の間隔を測定するというあなたのアイデアが最善の解決策だと思います。
フレームレートランタイムを変更する予定がない場合は、プロジェクト全体で使用できるすべてのグローバル値を含むSettingsクラスを使用すると便利です。
Settings.as
package
{
public class Settings
{
public static const FRAMERATE : int = 30;
public static const BUILD : String = "build 0.12";
public static const APPLICATION_WIDTH : int = 800;
public static const APPLICATION_HEIGHT : int = 800;
}
}
Main.as
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
stage.frameRate = Settings.FRAMERATE;
}
}
}