0

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

当我将班级行更改为

public class myClass extends Sprite {

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

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

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

我怎么解决这个问题?

4

5 回答 5

3

您的问题是您的 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"];
        }
    }
}

`

于 2010-11-24T15:25:18.240 回答
2

我发现了问题所在。有问题的班级不是项目中使用的主要班级,而是次要班级。

我已将代码移至主类以获取参数,并在获取参数后将它们发送到类构造函数。

于 2008-09-20T22:23:00.857 回答
2

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

我经常将 flashvars 用于在整个项目中经常使用的变量。国家和语言等变量。我发现在这种情况下,最好在文档类中捕获这些参数并使用所述参数作为值创建公共变量。这将使 _global 样式访问这些变量。话虽如此,您确实应该谨慎使用全局变量,尤其是在处理协作项目时。

于 2008-09-22T18:11:28.713 回答
1

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

mx.core.Application的 LiveDocs 页面:

application : Object
[静态] [只读]​​ 对顶级应用程序的引用。

parameters : Object
[只读]​​ parameters 属性返回一个对象,其中包含表示提供给此应用程序的参数的名称-值对。

有两个参数来源:应用程序 URL 的查询字符串和 FlashVars HTML 参数的值(这只影响主应用程序)。

于 2008-09-20T22:30:59.997 回答
0

我认为你应该从 Sprite 扩展,但一定要先初始化它,然后再放到舞台上。尝试启用调试并查看异常报告所说的究竟是什么。

于 2008-09-20T21:39:03.833 回答