从任意位置访问阶段

时间:2011-09-02 23:41:42

标签: flash actionscript-3 stage

假设我有一个实用工具类,我想访问该阶段(为了获得frameRate)。

我并不特别想强迫用户在使用它之前将阶段传递给每个方法或在我的类上设置静态属性。

有没有办法在没有被传递的情况下获得舞台?我只需要frameRate!

2 个答案:

答案 0 :(得分: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事件之间间隔的想法是最好的解决方案。

答案 1 :(得分: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;
        }

    }
}