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

时间:2008-09-20 21:32:10

标签: flash actionscript-3 parameters flashvars

当我尝试访问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:通过带有静态类型源的引用访问可能未定义的属性root:myClass。

当我将课程行更改为

public class myClass extends Sprite {

我没有得到编译器错误,但我确实在输出窗口中得到了这个:

TypeError:错误#1009:无法访问空对象引用的属性或方法。

通过调试器(如建议的那样),我可以看到 this.root 为空。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

您的问题是您的DisplayObject尚未添加到DisplayList,在您尝试访问Flash变量时。因此根据您的对象,根显示对象为null。

您可以使用以下命令确保您的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"];
        }
    }
}

`

答案 1 :(得分:2)

我发现了问题所在。有问题的类不是项目中使用的主类,而是辅助类。

我已经将代码移动到主类来获取参数,在我得到它们之后,我将它们发送到类构造函数。

答案 2 :(得分:2)

问题确实是您试图从非显示对象或文档类外部访问此信息。如果您希望访问root或stage,则必须首先将希望访问的对象添加到显示列表中。

我经常将flashvars用于整个项目中经常使用的变量。变量如国家和语言。我发现在这种情况下,最好在文档类中捕获这些参数,并使用所述参数作为值创建公共变量。这将为_global样式提供对这些变量的访问。总而言之,你真的应该谨慎使用全局变量,尤其是在开展协作项目时。

答案 3 :(得分:1)

作为替代方案,您可以尝试使用 mx.core.Application.application.parameters 对象。

来自mx.core.Application的LiveDocs页面:

  

应用:对象   
[静态] [只读]​​对顶级应用程序的引用。   
  
参数:对象   
[只读]​​ parameters属性返回一个Object,其中包含表示提供给此Application的参数的名称 - 值对。   
  
有两个参数来源:应用程序URL的查询字符串,以及FlashVars HTML参数的值(这只影响主应用程序)。

答案 4 :(得分:0)

我认为你应该从Sprite扩展,但一定要先将它初始化并放到舞台上。尝试启用调试,并查看异常报告所示的确切空白。