flash Actionscript 3.0 入门问题,题目长,但很简单啊
fla里面的文档类是main,同目录下面的另外一个类叫myRect.myRect.as里面的内容如下://myRect开始package{importflash.disp...
fla里面的文档类是main,同目录下面的另外一个类叫myRect.
myRect.as里面的内容如下:
//myRect开始
package
{
import flash.display.MovieClip;
public class myRect extends MovieClip
{
var myMovieClip:MovieClip;
var resultRect:MovieClip;
public function myRect(paraW:Number=50,paraH:Number=50)
{
resultRect=drawMyRect(paraW,paraH);
setPosition(resultRect);
addChild(resultRect);
}
function drawMyRect(paraWidth:Number,paraHeight:Number):MovieClip//产生矩形
{
myMovieClip=new MovieClip();
myMovieClip.graphics.beginFill(0xff00ff,.8);
myMovieClip.graphics.drawRect(0,0,paraWidth,paraHeight);
myMovieClip.graphics.endFill();
return myMovieClip;
}
private function setPosition(paraMC:MovieClip)//居中
{
paraMC.x=(stage.stageWidth-paraMC.width)/2;
paraMC.y=(stage.stageHeight-paraMC.height)/2;
}
}
}
//myRect结束
绑定在test上面的文档main.as中的内容是如下:
//main开始
package
{
import flash.display.Sprite;
public class main extends Sprite
{
public function main()
{
super();
var myTongXin_myRect:myRect=new myRect();
addChild(myTongXin_myRect);
}
}
}
//main结束
想要的意思是:用main.as调用myRect类,产生一个小正方形(本来还有随机色彩填充,未写进去),显示在舞台上,简单吧.
错误是:
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at myRect/::setPosition()
at myRect$iinit()
at main$iinit()
我知道是stage的问题,但是,我不知道怎么办啊 展开
myRect.as里面的内容如下:
//myRect开始
package
{
import flash.display.MovieClip;
public class myRect extends MovieClip
{
var myMovieClip:MovieClip;
var resultRect:MovieClip;
public function myRect(paraW:Number=50,paraH:Number=50)
{
resultRect=drawMyRect(paraW,paraH);
setPosition(resultRect);
addChild(resultRect);
}
function drawMyRect(paraWidth:Number,paraHeight:Number):MovieClip//产生矩形
{
myMovieClip=new MovieClip();
myMovieClip.graphics.beginFill(0xff00ff,.8);
myMovieClip.graphics.drawRect(0,0,paraWidth,paraHeight);
myMovieClip.graphics.endFill();
return myMovieClip;
}
private function setPosition(paraMC:MovieClip)//居中
{
paraMC.x=(stage.stageWidth-paraMC.width)/2;
paraMC.y=(stage.stageHeight-paraMC.height)/2;
}
}
}
//myRect结束
绑定在test上面的文档main.as中的内容是如下:
//main开始
package
{
import flash.display.Sprite;
public class main extends Sprite
{
public function main()
{
super();
var myTongXin_myRect:myRect=new myRect();
addChild(myTongXin_myRect);
}
}
}
//main结束
想要的意思是:用main.as调用myRect类,产生一个小正方形(本来还有随机色彩填充,未写进去),显示在舞台上,简单吧.
错误是:
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at myRect/::setPosition()
at myRect$iinit()
at main$iinit()
我知道是stage的问题,但是,我不知道怎么办啊 展开
展开全部
一个显示对象的stage成员初始值是null,只有在这个显示对象被添加到显示列表之后(被addChild()之后)才会被设置值,才能被访问。
你的main()里建立myRect对象,然后才把这个myRect对象添加到显示列表里,因此在执行myRect类构造函数时,myRect还没有被添加到显示列表,所以它的stage成员是null,你在setPosition()访问stage就会出错。
出这个错误是因为你的类设计不太合理。通常设置一个显示对象的坐标都是这个显示对象的容器的任务,因为只有容器掌握着足够的信息使得它能从整体上把握其内容的相对位置,因此才能决定每一个内容的坐标。
你把setPosition()的工作移到main()里就不会有问题了。如果你仍然希望myRect对象能自己完成居中的设置,那就必须在其构造函数的参数列表里加些东西,比如给他stage对象的引用,或者直接给他stage.stageWidth和stage.stageHeight的值,然后构造函数再把这些传给setPosition()。说到根上,就是myRect对象自己掌握的信息不够。
还有一个解决方案是在myRect中设置一个Event.ENTER_FRAME事件的监听器,在第一个Event.ENTER_FRAME事件发生的时候进行SetPosition(),因为这个时候myRect对象已经被添加到显示列表中,所以SetPosition()访问stage不会有问题。不过这种技巧是AS 2.0时代的无奈之举,在AS 3.0中不推荐。
你的main()里建立myRect对象,然后才把这个myRect对象添加到显示列表里,因此在执行myRect类构造函数时,myRect还没有被添加到显示列表,所以它的stage成员是null,你在setPosition()访问stage就会出错。
出这个错误是因为你的类设计不太合理。通常设置一个显示对象的坐标都是这个显示对象的容器的任务,因为只有容器掌握着足够的信息使得它能从整体上把握其内容的相对位置,因此才能决定每一个内容的坐标。
你把setPosition()的工作移到main()里就不会有问题了。如果你仍然希望myRect对象能自己完成居中的设置,那就必须在其构造函数的参数列表里加些东西,比如给他stage对象的引用,或者直接给他stage.stageWidth和stage.stageHeight的值,然后构造函数再把这些传给setPosition()。说到根上,就是myRect对象自己掌握的信息不够。
还有一个解决方案是在myRect中设置一个Event.ENTER_FRAME事件的监听器,在第一个Event.ENTER_FRAME事件发生的时候进行SetPosition(),因为这个时候myRect对象已经被添加到显示列表中,所以SetPosition()访问stage不会有问题。不过这种技巧是AS 2.0时代的无奈之举,在AS 3.0中不推荐。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询