1

(frameRateを取得するために)ステージにアクセスしたいユーティリティクラスがあるとします。

特に、ユーザーがステージを各メソッドに渡すように強制したり、クラスを使用する前にクラスに静的プロパティを設定したりする必要はありません。

ステージを通過せずにステージを手に入れる方法はありますか?必要なのはframeRateだけです!

4

2 に答える 2

0

メインドキュメントクラス(またはステージへの参照が利用可能な場合)でフレームレートをパブリック静的変数またはパブリック定数として設定し、ユーティリティクラスからその静的変数を呼び出します。

ドキュメントクラス

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イベント間の間隔を測定するというあなたのアイデアが最善の解決策だと思います。

于 2011-09-03T01:30:56.370 に答える
0

フレームレートランタイムを変更する予定がない場合は、プロジェクト全体で使用できるすべてのグローバル値を含む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;
        }

    }
}
于 2011-09-03T08:15:00.687 に答える