您的位置:首页 > 其它

AS3 无法访问空对象引用的属性或方法

2010-06-12 13:08 375 查看
AS3 无法访问空对象引用的属性或方法

AS3 flash cs4自带的编译器实在是太一般,只报错误,不曝错误行,最让人郁闷的是
“无法访问空对象引用的属性或方法”
只指出错误文件而不报错误行。

这个错误的原因是访问,设置了空对象的属性或者调用了空对象的方法。

第一点可能:

比如 var
obj:Object;

obj.aaa()

当这行错误代码在as文文件中,被fla调用,就会报错。

第二点可能:

最为广泛的是stage对象,如果一个已经编译的swf文件被导入到fla作为一个元件,当这个swf有stage对象的代码,

将把导入的舞台作为它的stage,但是它是无法获取的,因此会造成swf中调用的stage=null,编译器报出“无法访问空对象引用的属性或方法”。

例如stage.displayState=StageDisplayState.FULL_SCREEN

将造成编译错误。这个错误同样会发生在as文档类中。如果a是某fla的文档类,a中实例化另一个b类,如果b类中有stage对象,或者其他空对象,就会报错。请仔细检查。

解决方法:增加 对象名.addEventListener(Event.ADDED_TO_STAGE,
处理函数名),然后在处理函数里写stage相关的操作。注意只可在此函数里或此函数调用的函数里写。还要import flash.events.Event

第三点可能:

Load一个大文件时,没有侦听COMPLETE事件,就急忙为这个文件的Loader赋值各种参数,由于没有加载完全,将导致找不到对象。

解决方法:Loader.addEventListener(Event.COMPLETE,setting)setting为加载完毕执行的函数

并记得
import flash.events.Event

第四点:没有addChild到容器内

一个文件t1.as

-------------------------------------------------

package{

import
flash.display.Sprite

public class t1 extends Sprite

{

function
t1()

{

var circle = new Sprite();

circle.graphics.beginFill(0x000000,
1)

circle.graphics.drawCircle(0, 0,
15);

addChild(circle);

circle.graphics.endFill();

}

}

}

-------------------------------------------------------

另一个文件t0.as

--------------------------------------------

package
{

import flash.display.Sprite;

public class t0 extends Sprite
{

function t0() {

var obj=new t1();

//addChild(obj)
//漏掉了addChild

trace(this);

}

}

}

新建一个fla,设置文档类为t1,发现可以画出一个黑色的园,但如果设置文档类为t0,就报出无法访问空对象。

因为每一个as文件,我们可以把它看做是一个独立的文档性显示对象容器(displayObjectContainer),.as文件对象中的addChild实际上是把各种显示对象添加到这个容器里。

只有被fla设为文档类的as文件,才会被添加到stage里。
其他的都是一个个装满显示对象的容器。当我们需要在舞台上显示它们时,必须先在文档类as文件代码里实例化,然后addChild();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐