说我有一个工具类,我想访问舞台(为了获得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