我还可以在AS3中创建全局变量吗?

时间:2014-09-18 05:56:55

标签: actionscript-3 global

在回答here之后,我创建了一个名为MyGlobals.as的文件并放置了一些全局变量和函数,以便我可以从项目中的任何位置访问它,就像AS3内置函数一样{{} 1}}方法。

这是MyGlobals.as,它位于trace()文件夹(顶级文件夹)

src

看起来我的IDE(FD4)也识别所有这些函数和变量,并且像任何其他内置全局函数一样突出显示变量和函数。但是,我收到编译错误“访问可能未定义的变量xxx”。代码就像我的Main(或其他classe)中的package { public var MessageQueue:Array = new Array(); public var main:Main; public var BOOKING_STATUS_DATA:Object; public function postMessage(msg:Object):void { MessageQueue.push(msg); } public function processMessage():void { var msg:Object = MessageQueue.pop(); if (msg) { switch (msg.type) { } } } 一样简单。

我想知道Adboe最近做了什么改变现在无法完成或者我错过了什么?我不确定是否需要向FD提供任何特殊说明以包含此MyGlobals.as?

我使用的是FD4,Flex SKD 3.1,FP12.0

我知道最好的做法,建议避免使用这种类型的方法来创建全局变量,但我真的需要它为我的项目我感到舒适,我觉得最好的方式(现在)与其他任何路径相比这涉及到令人生畏的代码重构任务。我只想做一些可以在AS3中完成的事情,我猜这不是一个黑客。

2 个答案:

答案 0 :(得分:1)

我做了一些游戏;它看起来像你只能在每个.as文件的包级别定义一(1)属性或方法。它必须与包含在.as文件中的.as文件名称相同(区分大小写)。

所以不,自旧的Flash版本以来没有任何变化

在您的情况下,这意味着您需要五个单独的ActionScript文件:

MessageQueue.as

package
{
    public var MessageQueue:Array;
}

main.as

package
{
    public var main:Main;
}

...等。正如您所看到的,这是非常麻烦的,使用这种方法时许多其他人的另一个缺点。我建议在这种情况下使用单例模式。

答案 1 :(得分:0)

package{
public class Singleton{
    private static var _instance:Singleton=null;
    private var _score:Number=0;
    public function Singleton(e:SingletonEnforcer){
        trace(‘new instance of singleton created’);
    }
    public static function getInstance():Singleton{
        if(_instance==null){
            _instance=new Singleton(new SingletonEnforcer());
        }
        return _instance;
    }
    public function get score():Number{
        return _score;
    }
    public function set score(newScore:Number):void{
        _score=newScore;
    }
}

}

然后在你导入单例类

时你的任何as3类

导入Singleton

你需要更新全局var_score

使用例如

var s:Singleton=Singleton.getInstance();
s.score=50;
trace(s.score);

同样的事情来显示来自另一个类的50

   var wawa:Singleton=Singleton.getInstance();

迹(wawa.score)