2010-02-19 110 views
0

我想以后的addChild追查在子视图stage.name:Actionscript:如何获取添加的孩子的阶段属性?

import flash.events.Event; 
import flash.text.TextField; 
public class TestView extends TextField { 
    public function TestView() { 
     addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); 
    } 

    private function handleAddedToStage(event : Event) : void { 
     this.text = "TEXT ON TEXTFIELD"; 
     trace("Stage is"+stage.name); 
     trace("Stage width"+stage.stageWidth); 
    } 
} 

stage.name已经overrided:在主营:

import flash.display.Sprite; 
public class Main extends Sprite { 
    public function Main() { 
     addChild(new TestView()); 
    } 
    override public function get name():String { 
     return "MAINSTAGE"; 
    } 
} 

但在日志中获得零: 尾:FLASHLOG .TXT:文件截断 舞台ISNULL

回答

0

我不明白为什么stage回报null,但压倒一切的nameMain类将不会影响stage.name属性。显示对象的stage变量指向闪存电影的全局唯一Stage对象,该对象与Main实例不同。在AS3中,有一个独特的flash.display.Stage实例,它可以从当前位于显示列表中的任何显示对象访问(使用addChild方法添加)。如果您想访问主要的Sprite实例,请改为使用displayObject.root

0

您可以从任何地方访问阶段Flex应用程序中使用Application.application.stage

0

不上你要完成的相当清楚,但快速测试我跑,stage不为空,但是stage.name null。我正在使用Flex。这可能只是因为我们没有给它一个名字。

<?xml version="1.0" encoding="utf-8"?> 
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"> 

    <s:Button id="button" 
     addedToStage="trace(button.stage);trace(button.stage.name)" 
     click="trace(button.stage.name)" 
     horizontalCenter="0" verticalCenter="0"/> 

</s:Application> 

输出:

[object Stage] 
null 
null 

重写主get name不会影响这一点。