stage和MainTimeLine是不一样的

作者: ladeng6666 分类: Flash 发布时间: 2012-05-21 14:17 阅读: 9,250

在开发flash应用时,必不可少的就是将原件添加到舞台上,所以天天都会用到下面的语句

今天在学习load加载swf交互方法时,突然发现stage和this是不一样的(我这里指的是在主时间轴或文档类中使用stage和this)

  • stage:可以看做是一个静态顶级变量。不管在哪里调用,都是指最外层swf的舞台。
  • this:它是文档类(如果没有文档类,在编译时会自动生成)的一个实例对象,同样也是stage的child。

所以通常的this.addChild或addChild都添加到了文档类MainTimeLine的实例中;而stage.addChild是直接添加到了舞台上。

对于加载与被加载swf,stage和this的层次关系是

通过下面的实例可以更好的理解这一点:

一、创建子SWF

创建一个名为ext_swf的文件,并创建两个尺寸相同的蓝色和红色的矩形,通过下面的代码将他们添加到舞台上

编译ext_swf.swf后,只能看到蓝色矩形,因为它把红色矩形完全覆盖了,效果如下:

二、加载SWF

创建一个名为container的文件,通过loader加载ext_swf.swf,并将loader添加到舞台上,代码如下:

你觉得结果会是什么样子的呢?是不是像下面这样呢?

因为红色矩形是通过this.addChild添加,所以它的父级是文档里对象,也就是MainTimeLine。所以它会随着这个对象位移。

而蓝色矩形是通过stage.addChild添加的,所以它始终都是以stage的坐标系为基准的。

源代码下载

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

6条评论
  • ddw1997

    2012 年 5 月 28 日 上午 7:18

    祝贺新博客开展!想请教一个DisplacementMapFilter的理解问题,您这里不方便写代码,麻烦博主看看:
    http://bbs.blueidea.com/thread-3061517-1-1.html
    希望得到您的指导,感谢。。。

  • crylg

    2012 年 7 月 22 日 下午 2:32

    一、创建子SWF
    创建一个名为ext_swf的文件,并创建两个尺寸相同的蓝色和红色的矩形,通过下面的代码将他们添加到舞台上

    1
    2
    3
    this.addChild(new Red());
    //蓝色框始终在(0,0)位置,因为它永远在stage上
    stage.addChild(new Blue());

    这里一段觉得好像不能表示什么吧,蓝色后addChild所以在最上层。
    不过很赞同你另外所说的。
    学习了

    1. lanzhipeng

      2012 年 9 月 7 日 上午 9:19

      嗯嗯,我刚看想说的就是这个问题,这个不能说明什么的,虽然理解的人都知道,但是新手小白是看不懂的!少年!

      -bylanzhipeng

  • 286009026(惜缘)

    2012 年 9 月 7 日 上午 10:16

    子级的SWF文件中的stage貌似不能用吧?和主SWF中的stage应该会冲突 报错的吗?求解释…..

    1. ladeng6666

      2012 年 9 月 7 日 下午 9:00

      不冲突,只不过子级SWF的stage也是指的主SWF力的stage,他们其实是一个东东。
      这样会导致单独运行子级SWF时通过stage调用的对象是正常的,而在主SWF中加载子级SWF时,可能会因为stage引用主SWF的stage而引发错误!

  • Kendra Fondren

    2013 年 7 月 16 日 下午 2:05

    This is helpful!

发表评论

电子邮件地址不会被公开。 必填项已用*标注