2011-09-02 35 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; 
     } 

    } 
}