在AS3中通过参数访问FlashVars的问题

nquas 发布于 2018-05-05 flash 最后更新 2018-05-05 13:34 238 浏览

当我尝试访问AS3类中的flashVars时,我不断收到编译器错误。 这是一个剥离版本的代码:

package myPackage {
 import flash.display.Loader;
 import flash.display.LoaderInfo;
 import flash.display.Sprite;
  public class myClass {
    public function CTrafficHandler() {
        var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myFvar;}}}
我得到一个编译错误: 1119:访问可能未定义的属性根通过引用与静态类型源:myClass。 当我将类行更改为
public class myClass extends Sprite {
我没有收到编译器错误,但是我确实在输出窗口中看到了这个错误: TypeError:错误#1009:无法访问空对象引用的属性或方法。 通过调试器(如建议),我可以看到this.root为空。 我怎么解决这个问题?
已邀请:

tiure

赞同来自:

我认为你应该从Sprite延伸出来,但一定要先初始化它,然后才能登台。尝试启用调试,并查看异常报告所说的确切内容为空。

nquas

赞同来自:

我发现问题是什么。有问题的班级不是该项目使用的主要班级,而是中等班级。 我已经将代码移动到主类中以获取参数,并在获取它们之后,将它们发送到类构造函数。

ket

赞同来自:

作为替代,您可以尝试使用mx.core.Application.application.parameters对象。 从mx.core.Application的LiveDocs页面:

application : Object
[static] [read-only] A reference to the top-level application.

parameters : Object
[read-only] The parameters property returns an Object containing name-value pairs representing the parameters provided to this Application.

There are two sources of parameters: the query string of the Application's URL, and the value of the FlashVars HTML parameter (this affects only the main Application).

kex

赞同来自:

问题的确在于您试图从非显示对象或文档类外部访问此信息。如果您希望访问根目录或阶段,则希望访问的对象必须首先添加到显示列表中。 我经常在整个项目中使用经常使用变量的flashvars。变量如国家和语言。我发现在这种情况下,最好在文档类中捕获这些参数,并使用所述参数作为值创建公共变量。这将使_全局样式访问这些变量。尽管如此,你应该谨慎使用全局变量,尤其是在开展协作项目时。

gautem

赞同来自:

你的问题是你的DisplayObject还没有被添加到DisplayList中,在你试图访问flash vars的时候。根据你的对象,根显示对象因此是空的。 您可以通过使用以下内容确保您的DisplayObject处于舞台上:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
public class MySprite extends Sprite
    {
        // constructor
        public function MySprite()
        {
            super();
            addEventListener( Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true );
        }
private function onAddedToStage( event:Event ):void
        {
            removeEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
var paramList:Object = LoaderInfo( this.root.loaderInfo ).parameters;
            var myParam:String = paramList["myParam"];
        }
    }
}
`