以前一直对Stage是顶级容器,但又必须以this.stage才能访问,感到很别扭。
最近在项目中使用加载类即ClientLoader.swf来加载主程序客户端类即Client.swf时,用的是this.addChild(),这样客户端类就成了加载类的子元素。这不是我想要的,初始化加载类只是个临时过渡元素。虽然这样写下去也没什么问题。只是注意下当从ClientLoader.swf运行项目时,Client类里面的this.parent不是Stage了,而是ClientLoader类。
因为主运行文档类都会有点大,所有必须做一个初始化加载条,试过多种方式,用一个很小的加载器swf(1k左右)在浏览器中最先初始化是最好的策略。
但记住这个加载器swf只是个临时过渡类,从逻辑上来说,主文档类才是我们的最顶级容器。
在文档类中,this.parent的Stage对象和this.stage是等价的,官方文档说了,无法以全局方式访问 Stage 对象。而是需要利用 DisplayObject 实例的 stage 属性进行访问。
这里要注意了,在加载器类中,一定要用this.stage.addChild()来添加主文档类。
这样主文档类就和加载器类成为并列及置于其上的兄弟元素。但是在加载器类中不能用this.stage.removeChild(this),去掉自身。虽然stage是顶级容器,但是它只能通过其子元素实例才能访问。自然无法去掉自身。但是可以在Client类中判断,当this.stage.numChildren为2时,用this.stage.removeChildAt(0),来彻底干掉ClientLoader类。
也就是说,无论何种情况,Stage下面必须至少有一个子元素,这个子元素就是当前swf文档构造类。Stage下允许add多个子元素,但不能remove当前swf构造类,如果是用加载的方式并且是用this.stage.addChild(swf)加入的子元素,可以在后swf构造类中移除其他子元素。
本文遵循署名-非商业性使用共享协议,转载请注明。