【问题标题】:External SWF Loading problem外部 SWF 加载问题
【发布时间】:2011-02-12 01:15:21
【问题描述】:

我在一个 SWF 中加载了一个 SWF,其中包含一个 papervision 场景。

我以前做过,但问题是,我收到一个错误 - 我不确定问题到底是什么。

    private function downloadSWF(url:String):void
  {
   trace(url);
   var urlRequest:URLRequest = new URLRequest(url);
   var loader:Loader = new Loader(); 
   loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loaderProgressEventHandler);
   loader.load(urlRequest);
  }



 private function loaderProgressEventHandler(ev:ProgressEvent):void
  {

   loader.preloaderCircle.percent = ev.bytesLoaded / ev.bytesTotal;
  }

当应用程序运行代码时 - 我收到错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
 at com.dehash.pv3d.examples.physics::WowDemo()

如果加载还没有完成,为什么我会收到这个?

提前谢谢各位。


编辑: 尝试一个空白的子 swf,看看另一个是否正在尝试访问父级中的某些内容。 ——豪尔赫

似乎我这样做了,即使使用带有鼠标单击侦听器的简单 SWF 也会导致错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference. at simple_fla::MainTimeline/frame1()

我的代码是:

import flash.events.MouseEvent;

this.stage.addEventListener(MouseEvent.CLICK, onClick);

function onClick(ev:MouseEvent):void
{
    trace("MouseClick");
}

我错过了什么明显的东西吗??

【问题讨论】:

  • 如果loader是一个Loader Object(var loader:Loader = new Loader()),那么preloaderCircle从哪里来?(loader.preloaderCircle.percent),除非var loader:Loader是本地变量downloadSWF,loaderProgressEventHandler 中的 loader 是对预加载器 MovieClip 的引用。还要检查演示是否试图以任何方式访问舞台。如果是这样,请预加载您的 swf,将其添加到舞台并在 ADDED_TO_STAGE 事件处理程序上使用 init() 方法或其他方法来运行您加载的 swf。
  • 谢谢乔治。你的权利loader.preloaderCircle... 应该是loaderMenu.preloaderCircle,我打错字了。 init() 方法是一个完美的主意。不错。

标签: actionscript-3 flash loader


【解决方案1】:

问题是加载的 swf 在没有添加到舞台的情况下开始运行。所以stage 为空,导致该错误。

使用 addedToStageEventHandler 的第二个示例有效,因为 stage 仅在对象添加到舞台后才被引用,因此 stage 不再为空。

第一个错误的可能解决方案是将加载程序添加到阶段。这样,当 swf 加载并启动时,它已经有一个 stage 引用。

【讨论】:

  • 谢谢老兄。现在很有意义。
【解决方案2】:

如果出现错误,它甚至不会加载。您正在访问 WowDemo() 类上的未引用对象...您是否正确实例化了该类?

【讨论】:

  • 是的,我想是的 - 我正在加载的 SWF 本身运行良好。父 SWF 也可以正常运行,就在我尝试加载子 SWF 时,出现此错误。子 SWF 是否有可能尝试使用父级的库?
  • 另外,当我不尝试使用 papervision 加载外部 SWF 时,一切正常。
  • 尝试一个空白的子 swf,看看另一个是否正在尝试访问父级中的某些内容。
【解决方案3】:

这似乎在我的孩子 SWF 中工作:

this.addEventListener(Event.ADDED_TO_STAGE, addedToStageEventHandler);

function onClick(ev:MouseEvent):void
{
    trace("MouseClick");
    var event:Event = new Event("END", true, false);
    this.dispatchEvent(event);
}

function addedToStageEventHandler(ev:Event):void
{
    this.stage.addEventListener(MouseEvent.CLICK, onClick);

}

有人知道为什么吗?

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 2011-03-29
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多