as3 的stage 的问题

FirstAnimation.as中package{importflash.display.Sprite;importflash.events.Event;publicc... FirstAnimation.as 中
package
{
import flash.display.Sprite;
import flash.events.Event;

public class FirstAnimation extends Sprite
{
private var ball:Sprite;

public function FirstAnimation()
{
init();
}
private function init():void
{

ball = new Sprite();
addChild(ball);
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.x = 20;

//注意这一句!!!一加上就出错
ball.y = Stage.stageHeight / 2;

ball.y=50;
ball.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
ball.x++;
}
}
}

text1.fla中

var a:FirstAnimation=new FirstAnimation();
addChild(a);

输出中弹出的:

TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at FirstAnimation/init()
at FirstAnimation()
at text001_fla::MainTimeline/frame1()
那一句是 stage 是小写的
ball.y = stage.stageHeight / 2;
展开
 我来答
651126732
2010-03-14 · 超过15用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:23.4万
展开全部
完善版本:
package {
import flash.display.Sprite;
import flash.events.Event;

public class FirstAnimation extends Sprite {
private var ball:Sprite;

public function FirstAnimation() {

init();
}
private function init():void {

ball= new Sprite();
addChild(ball);

ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.x = 20;
ball.addEventListener(Event.ADDED_TO_STAGE,b);
//注意这一句!!!一加上就出错
function b() {
ball.y = stage.stageHeight / 2;

}
ball.addEventListener(Event.ENTER_FRAME, onEnterFramepppp);
}
private function onEnterFramepppp(event:Event):void {
ball.x++;
}
}
}
这是我给你做的两处修改:
ball.addEventListener(Event.ADDED_TO_STAGE,b);
//注意这一句!!!一加上就出错
function b() {
ball.y = stage.stageHeight / 2;

}
第二处:
ball.addEventListener(Event.ENTER_FRAME, onEnterFramepppp);
}
private function onEnterFramepppp(event:Event):void {
ball.x++;
总结:一定要在addChild完成以后,通过实例a调用stage。这里ADDED_TO_STAGE正好解决了这个问题
thinkinside
2010-03-10 · TA获得超过497个赞
知道小有建树答主
回答量:230
采纳率:0%
帮助的人:172万
展开全部
这是因为:
FirstAnimation刚刚被实例化的时候还没有被放到舞台上,只有addChild(a);这句执行后,FirstAnimation的实例才访问的到stage。
你应该保持这样的代码习惯,也可以叫做格式吧:
public function FirstAnimation():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//这里添加你原来的代码
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式