论坛首页 编程语言技术论坛

关于AS3的stage

浏览 6250 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-22   最后修改:2010-01-22

1.STAGE是根,是最顶层的容器!可以通过STAGE的任何子容器或显示

对象以DisplayObjectContainer.stage(需注意的是stage是小写,如果在时间轴上trace(stage.width)是正确的,如果写成trace(Stage.width则会报错))或DisplayObject.stage访问到Stage类的

唯一实例stage.就连主时间轴也是stage容器的子容器。
例如。你在主时间轴上写上代码:trace(this);输出的是什么呢?因为你是在主

时间轴上写的。所以返回的是一个对象:MainTimeLine,也就是主时间轴了。同

志们可以试试在主时间轴上写:trace(this.stage);当然输出的是Stage对象了

。也可以省略不写this,直接写:trace(stage);输出的还是Stage对象。为了更清

楚,在主时间轴上写上代码:trace(stage.getChildAt(0));看看输出的是什么

呢?如果是MainTimeLine的话,就更能说明问题了,主时间轴是stage容器的第

一个子容器,在索引位置0上。

2.stage.width 与stage.stageWidth

我记得width相当于sprite的width,是stage上所有child构成的范围的宽(

没东西width就是0),stageWidth就是舞台的宽
其实这个问题很简单,但是你为什么不自己用个两个文本框在各种不同的情况下

显示一下这两个的值呢。

stage.addEventListener(MouseEvent.CLICK,update);

function update(e)
{
   txt.text = String(stage.stageWidth);

   txt1.text = String(stage.width);
}

 

自己看看吧,改变一下舞台的大小,场景上的东西,还有环境,缩放,

自己试出来的结果永远比别人讲的来的清晰

 

3.这两天看AS3 cookbook和AS3的帮助文档,里面很多代码执行后都会出现“TypeError: Error #1009: 无法访问空对象引用的属性或方法。”这个错误。几经周折,才知道解决办法:使用addEventListener( Event.ADDED_TO_STAGE, enterDLHandle ),把要用的stage代码放到enterDLHandle里面,就没问题了。不知道有没有其他解决方法,知道的说声啊~

在经典论坛上提问这个问题,终于有人做出全面回答了,在此感谢zjs35

首先要明白stage是什么意思,stage是显示对象的一个引用舞台的属性,如果显示对象不在显示列表中,即没有用addChild()添加,stage等于null,你的问题就在这里。
使用stage有下面几种方法:
1、文档类的构造函数中可以直接使用stage属性
2、非文档类可以通过参数传递到类里面。
class Test extends Shape
{
function Test(stage:Stage)
{
}
}
3、不想传递参数时,要注意代码的顺序。
class Test extends Shape
{
function Test()
{
}
functon useStage()
{
trace(stage)
}
}
这样使用
var test=new Test()
test.useStage()//null,你的问题出在这里
addChild(test)//添加到显示列表后,就可以使用stage属性。
test.useStage()//[object Stage]
总之,理解stage是显示对象的属性,位于显示列表中的显示对象的stage才引用舞台

   发表时间:2010-10-20  
我最近正在进行Flex利用Flash的测试。现在我用的是Flex Builder去加载一个现成的Flash文档。这个Flash是一个简单的射击文档,直接执行是没问题的。但是由Flex Builder加载后就出现对fscommand,stage.stageWidth识别方面的问题,请问有什么好办法没有。谢谢
0 请登录后投票
   发表时间:2010-10-20  
错误代码是:SecurityError: Error #2070: Security sandbox violation: caller file:///d:/flashdoc/射击.swf cannot access Stage owned by app:/g.swf.
at flash.display::Stage/get stageWidth()
at _fla::MainTimeline/startPos()
at _fla::MainTimeline/init()
at _fla::MainTimeline/frame2()
0 请登录后投票
   发表时间:2010-10-20  
找到原因了,需要把要加载的SWF文档放到Flex Project项目下,或者指定Source路径也可以。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics