如何在Actionscript中引用静态类

时间:2013-05-17 22:13:51

标签: actionscript

我提前为这个问题的新意而道歉;我想我不是在掌握Actionscript的基础知识,但却无法在其他地方找到答案。

我想要的是一些像C ++一样的全局常量。在C ++中,我只需要一个文件,我将#define MAP_HEIGHT 20,或类似的东西,当我将文件包含在顶部时,它们将是全局可访问的。在Actionscript中,我尝试制作一个静态类,如下所示:

package  
{
public class Settings {

    public const mapx:int = 20;

    public function Settings() {}

}
}

但是当我尝试使用冒号语法

在我的代码中引用它时
var a:int = Settings::mapx;

我收到错误“[Fault] exception,information = TypeError:Error#1034:Type Coercion failed:无法将Settings $转换为Namespace。”

我尝试了点语法:

var a:int = Settings.mapx;

并得到一个不同的错误,“通过带有静态类型Class的引用访问可能未定义的属性mapx。”

但我真正想要的是一个全局静态变量文件,比如在C ++中,并且无法在Actionscript中找到一种方法。

1 个答案:

答案 0 :(得分:2)

使用static关键字标记变量,常量和函数,如:

package
{
    public class MathUtil
    {

        public static const PI:Number = 3.141592653589;

        public static function deg2rad(angle:Number):Number
        {
            angle = !isNaN(angle) ? (angle) : (0);

            return angle * PI / 180;
        }

    }
}

然后你可以使用点符号。

var pi:Number = MathUtil.PI;
var angle:Number = MathUtil.deg2rad(45);

来自Adobe Flash Platform的ActionScript 3.0参考:Statements, Keywords & Directives

  

用法

class someClassName { 
  static var varName; 
  static const kName;
  static function methodName() { }
}
     

您只能在类定义中使用静态,而不能在接口中使用静态   定义

     

不继承静态类成员。你不能引用静态   使用子类名称的类成员,就像在Java或C ++中一样。   但是,您可以引用类中的静态变量或方法   或子类,不使用任何限定符。请参阅下面的示例。

     

您不能在静态内使用super语句或this关键字   方法