2011-09-02 62 views
1

说我有一个工具类,我想访问舞台(为了获得frameRate)。从任意位置访问舞台

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

有没有什么办法可以在没有传入的情况下获得舞台的位置?我需要的是frameRate!

+1

我想我就衡量 – Cameron

回答

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事件间隔的想法是最好的解决方案。

+0

由于ENTER_FRAME事件之间的时间间隔,但我没有在文档类控制。我的实用程序被编译为独立的SWC。 – Cameron

+0

如果没有人直接或间接地向我提供舞台,舞台看起来是不可能的。好吧! – Cameron

+0

这是因为您的实用程序类不是显示对象,所以无法访问舞台。另一种可能的解决方案是使实用程序类成为显示对象,或强制使用将空白显示对象添加到显示列表。这种方法确实是贫民窟,但通过显示对象访问舞台是访问舞台属性的唯一常用方式。 – TheDarkIn1978

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; 
     } 

    } 
}