在我的名为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,所以对所有事情都有些困惑。
答案 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?