在回答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中完成的事情,我猜这不是一个黑客。
答案 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)