說我有一個工具類,我想訪問舞臺(爲了獲得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事件間隔的想法是最好的解決方案。
由於ENTER_FRAME事件之間的時間間隔,但我沒有在文檔類控制。我的實用程序被編譯爲獨立的SWC。 – Cameron
如果沒有人直接或間接地向我提供舞臺,舞臺看起來是不可能的。好吧! – Cameron
這是因爲您的實用程序類不是顯示對象,所以無法訪問舞臺。另一種可能的解決方案是使實用程序類成爲顯示對象,或強制使用將空白顯示對象添加到顯示列表。這種方法確實是貧民窟,但通過顯示對象訪問舞臺是訪問舞臺屬性的唯一常用方式。 – TheDarkIn1978
如果您沒有計劃更改幀率運行時,則可以使用包含您可以在整個項目中使用的所有全局值的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;
}
}
}
我想我就衡量 – Cameron