stage在文档类中是null吗? ActionScript 3.0 Flash CS5

时间:2011-05-13 06:24:46

标签: flash actionscript-3 flash-cs5

在我的名为Engine的文档类中,stage变量由于某种原因为null:

package game
{

    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;
    public class Engine extends MovieClip
    {
        public function Engine()
        {
            trace(stage); // gives Null
        }
    }
}

到目前为止这个工作正常。我最近刚将两个动态文本字段添加到符号中,突然之间该阶段为空。我真的没有看到这种联系。

这是我第一次使用动作脚本和flash,所以对所有事情都有些困惑。

2 个答案:

答案 0 :(得分:6)

好的,我已经通过在CS5中为舞台添加TLF字体来重现您所经历的内容,这必然是导致它的原因。但是这段代码可以解决你的问题:

public function Engine():void 
{ 
     if( !this.stage ) 
         this.addEventListener( Event.ADDED_TO_STAGE, init ); 
     else 
         init(); 
} 

private function init(e:Event = null):void 
{ 
   this.removeEventListener( Event.ADDED_TO_STAGE, init ); 
   trace(stage);
 }  

我的猜测是,在这种情况下创建舞台会有一些延迟。我已经发生这种情况并且不知道为什么,所以这就是我处理它的方式。有用! :)

答案 1 :(得分:0)

我刚刚参与了一个我已经工作了一段时间的项目。 我的文档类中的构造函数突然在它的阶段找到了null。

就我而言(经过数小时的调查)后,我猜测资产已经添加到FLA中,其中包含一个 TLF TextField。我猜对了,因为我看到习惯性错误一次,但再也没有。

通常这会导致错误,可以快速识别并且易于修复。 这次不行。我发现我的文档类已添加到舞台上,然后立即从舞台中删除 - 至少Event.REMOVED_FROM_STAGE事件正在触发。

FLA中有很多的资产,并且试图追踪一个迷路的TLF TextField(可能是空的)非常令人生畏,所以我将FLA保存为AS2项目,然后将其保存回到AS3项目。我的所有链接都很好,TLF TextField(无论它在哪里)都被转换为经典链接。一切都很好。

这是一篇关于更直接问题的相同解决方案的帖子: How to stop/convert TLF textfield used in flash files when you have list to search?