文档类中的stage为空?ActionScript 3.0 Flash CS5

3
在我的文档类Engine中,stage变量出现了空值的情况:
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
        }
    }
}

这一直运行得很好,直到现在。我最近在一个符号中添加了两个动态文本字段,突然舞台为空了。我真的看不出有什么联系。

这是我第一次使用ActionScript和Flash,所以有点困惑。


文档类中没有理由使该阶段返回null。可能是其他问题,或者您在其他地方尝试初始化文档类。您对符号和两个动态文本字段有更多信息吗? - Marty
2个回答

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);
 }  

我猜测在这种情况下创建舞台存在一些延迟。我曾经遇到过这种情况,不知道为什么,所以我是这样处理的。它有效!:)


0

我在一项长期工作的项目中遇到了这个问题。突然间,我的文档类构造函数发现它的舞台为 null。

在我的情况下(经过数小时的调查),我猜测 FLA 中添加了一个带有一个 TLF TextField 的资源。我猜测是因为我看到了惯常的错误 一次,但再也没有出现过。

通常,这会导致一个很容易识别和修复的错误。但这一次不同。我发现我的文档类被添加到了舞台上,然后立即从舞台上移除 - 至少 Event.REMOVED_FROM_STAGE 事件被触发了。

FLA 中有很多资源,试图追踪一个偏离的 TLF TextField(可能为空)非常困难,所以我将 FLA 另存为 AS2 项目,然后再保存为 AS3 项目。所有的链接都没问题,而 TLF TextField(无论在哪里)都被转换为经典的 TextField。一切都好了。

这是一篇关于同样修复更直接问题的帖子: 如何在搜索列表时停止/转换使用Flash文件中的TLF文本字段?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接