flexAPI里面介绍:
显示对象的舞台。Flash 应用程序只有一个 Stage 对象。例如,您可以创建多个显示对象并加载到显示列表中,每个显示对象的 stage
属性是指相同的 Stage 对象(即使显示对象属于已加载的 SWF 文件)。
如果显示对象未添加到显示列表,则其 stage
属性会设置为 null
。
示例:
- import flash.text.TextField;
- var tf1:TextField = new TextField();
- tf1.text = "Text Field 1";
- tf1.border = true;
- tf1.x = 10;
- addChild(tf1);
- tf1tf1.width = tf1.stage.stageWidth / 2 - 10;
- var tf2:TextField = new TextField();
- tf2.text = "Text Field 2";
- tf2.border = true;
- tf2.x = tf1.x + tf1.width + 5;
- addChild(tf2);
- tf2tf2.width = tf2.stage.stageWidth / 2 - 10;
- trace(stage.stageWidth);
在 Application 初始化函数里面获取 this.stage 属性怎么提示 null
这原因主要跟 Application 四大初始化事件有关,必须弄清楚这四个事件,才能搞明白为什么?
四大初始化事件:preinitialize,initialize,creationComplete,apllicationComplete
1. preinitialize 的分派
应用程序 application 已实例化,但此时还未创建任何相关的孩子组件(child component),但是此时 application可获取孩子数。
2. initialize 的分派
此时,创建了相应的孩子组件,但还未对这些子组件进行布局。
3. creationComplete 的分派
应用程序application完成全部实例化,并完成所有子组件的布局
4. apllicationComplete 的分派
上面三处事件的完成,表明application内部启动的整个进程完成,就把 Application实例加入舞台(stage),接下来便会通知SystemManager派发applicationComplete事件。此时,启动程序启动完成并准备运行。
所有 在 applicaiton 的 preinitialize,initialize,creationComplete 事件处理函数里面 获取 stage, 这样肯定是null, 此时applicaiton实例还没有加入 stage,Application实例加入到舞台后,派发ApplicationComplete事件。所以,应该在ApplicationComplete 事件派发后获取 stage。