flash cs3 AS3:TypeError: Error #1009: 无法访问空对象引用的属性或方法。
TypeError:Error#1009:无法访问空对象引用的属性或方法。atMouseDistance/::init()atMouseDistance$iinit()a...
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at MouseDistance/::init()
at MouseDistance$iinit()
at AA_fla::MainTimeline/AA_fla::frame1()
源代码:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
/*测量场景中心与鼠标的距离*/
public class MouseDistance extends MovieClip {
private var mc1:MovieClip;
private var Tex:TextField;
private var Fma:TextFormat;
public function MouseDistance() {
init();
}
private function init():void {
mc1=new MovieClip();
addChild(mc1);
mc1.graphics.beginFill(0x000000);
mc1.graphics.drawRect(-2,-2,4,4);
mc1.graphics.endFill();
mc1.x=stage.stageWidth/2;
mc1.y=stage.stageHeight/2;
Fma=new TextFormat();
Fma.color=0xff0000;
Fma.size=20;
Tex=new TextField();
addChild(Tex);
Tex.border=true;
Tex.borderColor=0;
Tex.defaultTextFormat=Fma;
Tex.x=180;
Tex.y=120;
Tex.height=30;
Tex.width=80;
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMM);
}
public function onMM(event:MouseEvent):void {
graphics.clear();
graphics.lineStyle(2,0x9900FF,1);
graphics.moveTo(mc1.x,mc1.y);
graphics.lineTo(mouseX,mouseY);
var dx:Number=mc1.x-mouseX;
var dy:Number=mc1.y-mouseY;
var d:Number=Math.sqrt(dx*dx+dy*dy);
var dist:Number =Math.round(d*Math.pow(10,2))/Math.pow(10,2);
Tex.text=dist.toString();
}
}
}
可是在fla中
var f:MouseDistance=new MouseDistance();
addChild(f);
总是出现上面的问题 展开
at MouseDistance/::init()
at MouseDistance$iinit()
at AA_fla::MainTimeline/AA_fla::frame1()
源代码:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
/*测量场景中心与鼠标的距离*/
public class MouseDistance extends MovieClip {
private var mc1:MovieClip;
private var Tex:TextField;
private var Fma:TextFormat;
public function MouseDistance() {
init();
}
private function init():void {
mc1=new MovieClip();
addChild(mc1);
mc1.graphics.beginFill(0x000000);
mc1.graphics.drawRect(-2,-2,4,4);
mc1.graphics.endFill();
mc1.x=stage.stageWidth/2;
mc1.y=stage.stageHeight/2;
Fma=new TextFormat();
Fma.color=0xff0000;
Fma.size=20;
Tex=new TextField();
addChild(Tex);
Tex.border=true;
Tex.borderColor=0;
Tex.defaultTextFormat=Fma;
Tex.x=180;
Tex.y=120;
Tex.height=30;
Tex.width=80;
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMM);
}
public function onMM(event:MouseEvent):void {
graphics.clear();
graphics.lineStyle(2,0x9900FF,1);
graphics.moveTo(mc1.x,mc1.y);
graphics.lineTo(mouseX,mouseY);
var dx:Number=mc1.x-mouseX;
var dy:Number=mc1.y-mouseY;
var d:Number=Math.sqrt(dx*dx+dy*dy);
var dist:Number =Math.round(d*Math.pow(10,2))/Math.pow(10,2);
Tex.text=dist.toString();
}
}
}
可是在fla中
var f:MouseDistance=new MouseDistance();
addChild(f);
总是出现上面的问题 展开
3个回答
展开全部
先总的说一句,此报错是因为你在“对象还没加载到舞台上”的时候,就让这个对象“访问了舞台”,因为它找不到舞台,于是报错。
下面详细的解释一下:
你新建了一个MouseDistance类对象f,它的构造函数运行init();并且这个函数里面用到了舞台(语句:mc1.x=stage.stageWidth/2;),但是这个时候你还没有将f放入舞台(语句:addChild(f);),所以它找不到stage,然后报错。当你用mc1.x=150;mc1.y=125这样的语句写死的时候,就不会报错了。
但是你肯定也发现上面的解决方法相当的傻,下面说一个聪明的:
先侦听这个对象是否被加载到舞台上,当它被加载到舞台上的时候,你再执行你的init(),如此你就可以再init()里随意的访问stage了。具体代码如下:
package {
......
import flash.events.Event;//导入Event类
public function MouseDistance() {
addEventListener(Event.ADDED_TO_STAGE, init);//加“加载到舞台”的侦听
}
private function init(e:Event):void {//加个参数
......
}
你的代码是实时显示鼠标到舞台中心点的距离,并且将“中心点”和“鼠标所在点”连线,我这里如上更改后运行正常,希望我的解释对你有帮助。
下面详细的解释一下:
你新建了一个MouseDistance类对象f,它的构造函数运行init();并且这个函数里面用到了舞台(语句:mc1.x=stage.stageWidth/2;),但是这个时候你还没有将f放入舞台(语句:addChild(f);),所以它找不到stage,然后报错。当你用mc1.x=150;mc1.y=125这样的语句写死的时候,就不会报错了。
但是你肯定也发现上面的解决方法相当的傻,下面说一个聪明的:
先侦听这个对象是否被加载到舞台上,当它被加载到舞台上的时候,你再执行你的init(),如此你就可以再init()里随意的访问stage了。具体代码如下:
package {
......
import flash.events.Event;//导入Event类
public function MouseDistance() {
addEventListener(Event.ADDED_TO_STAGE, init);//加“加载到舞台”的侦听
}
private function init(e:Event):void {//加个参数
......
}
你的代码是实时显示鼠标到舞台中心点的距离,并且将“中心点”和“鼠标所在点”连线,我这里如上更改后运行正常,希望我的解释对你有帮助。
展开全部
修改一下脚本:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.display.Stage;
/*测量场景中心与鼠标的距离*/
public class MouseDistance extends MovieClip {
private var sta:Stage;
private var mc1:MovieClip;
private var Tex:TextField;
private var Fma:TextFormat;
public function MouseDistance(obj:Stage) {
sta=obj;
init();
}
private function init():void {
mc1=new MovieClip();
addChild(mc1);
mc1.graphics.beginFill(0x000000);
mc1.graphics.drawRect(-2,-2,4,4);
mc1.graphics.endFill();
mc1.x=stage.stageWidth/2;
mc1.y=stage.stageHeight/2;
Fma=new TextFormat();
Fma.color=0xff0000;
Fma.size=20;
Tex=new TextField();
addChild(Tex);
Tex.border=true;
Tex.borderColor=0;
Tex.defaultTextFormat=Fma;
Tex.x=180;
Tex.y=120;
Tex.height=30;
Tex.width=80;
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMM);
}
public function onMM(event:MouseEvent):void {
graphics.clear();
graphics.lineStyle(2,0x9900FF,1);
graphics.moveTo(mc1.x,mc1.y);
graphics.lineTo(mouseX,mouseY);
var dx:Number=mc1.x-mouseX;
var dy:Number=mc1.y-mouseY;
var d:Number=Math.sqrt(dx*dx+dy*dy);
var dist:Number =Math.round(d*Math.pow(10,2))/Math.pow(10,2);
Tex.text=dist.toString();
}
}
}
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.display.Stage;
/*测量场景中心与鼠标的距离*/
public class MouseDistance extends MovieClip {
private var sta:Stage;
private var mc1:MovieClip;
private var Tex:TextField;
private var Fma:TextFormat;
public function MouseDistance(obj:Stage) {
sta=obj;
init();
}
private function init():void {
mc1=new MovieClip();
addChild(mc1);
mc1.graphics.beginFill(0x000000);
mc1.graphics.drawRect(-2,-2,4,4);
mc1.graphics.endFill();
mc1.x=stage.stageWidth/2;
mc1.y=stage.stageHeight/2;
Fma=new TextFormat();
Fma.color=0xff0000;
Fma.size=20;
Tex=new TextField();
addChild(Tex);
Tex.border=true;
Tex.borderColor=0;
Tex.defaultTextFormat=Fma;
Tex.x=180;
Tex.y=120;
Tex.height=30;
Tex.width=80;
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMM);
}
public function onMM(event:MouseEvent):void {
graphics.clear();
graphics.lineStyle(2,0x9900FF,1);
graphics.moveTo(mc1.x,mc1.y);
graphics.lineTo(mouseX,mouseY);
var dx:Number=mc1.x-mouseX;
var dy:Number=mc1.y-mouseY;
var d:Number=Math.sqrt(dx*dx+dy*dy);
var dist:Number =Math.round(d*Math.pow(10,2))/Math.pow(10,2);
Tex.text=dist.toString();
}
}
}
追问
为什么看不到效果,什么都没有啊
追答
我解决的是你报错的问题,现在不报错就可以了,至于为什么不显示,这要看你的脚本是咋写的,这个类是干什么用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
解决方法,在舞台的属性面板中把文档类改成:MouseDistance
这样就不用在用var f:MouseDistance=new MouseDistance();
可以看到你想要的效果。
问题:stage只能是舞台层级可用的。
这样就不用在用var f:MouseDistance=new MouseDistance();
可以看到你想要的效果。
问题:stage只能是舞台层级可用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询